如何在MySQL中分组?

如何在MySQL中分组?,mysql,Mysql,假设我具备以下条件: 表 id (auto increment primary key) | age | country 1 | 5 | Germany 2 | 6 | Spain 3 | 7 | France 4 | 7 | Spain 5 | 8 | France 6 | 9 | France 7 | 2 | Mexico 8 | 7 | Saudi Arabia 9 | 5 | Saudi Arabia id (auto increment primary key) | age | co

假设我具备以下条件:

id (auto increment primary key) | age | country
1 | 5 | Germany
2 | 6 | Spain
3 | 7 | France
4 | 7 | Spain
5 | 8 | France
6 | 9 | France
7 | 2 | Mexico
8 | 7 | Saudi Arabia
9 | 5 | Saudi Arabia
id (auto increment primary key) | age | country | country_number
1 | 5 | Germany | 1
2 | 6 | Spain | 2
3 | 7 | France | 3
4 | 7 | Spain | 2
5 | 8 | France | 3
6 | 9 | France | 3
7 | 2 | Mexico | 4
8 | 7 | Saudi Arabia | 5
9 | 5 | Saudi Arabia | 5
我想要生成的表:

id (auto increment primary key) | age | country
1 | 5 | Germany
2 | 6 | Spain
3 | 7 | France
4 | 7 | Spain
5 | 8 | France
6 | 9 | France
7 | 2 | Mexico
8 | 7 | Saudi Arabia
9 | 5 | Saudi Arabia
id (auto increment primary key) | age | country | country_number
1 | 5 | Germany | 1
2 | 6 | Spain | 2
3 | 7 | France | 3
4 | 7 | Spain | 2
5 | 8 | France | 3
6 | 9 | France | 3
7 | 2 | Mexico | 4
8 | 7 | Saudi Arabia | 5
9 | 5 | Saudi Arabia | 5
请注意,“国家编号”只是一个基于唯一国家名称的唯一编号


使用光标很慢。我怎样才能做到我可以做一些“分组”?要为每个国家/地区分配唯一标识符?或者不需要按分组?

您应该创建一个单独的表来存储国家/地区,然后将来自国家/地区的主键(国家/地区id)作为外键存储在当前表中。

查询可以是(沙特阿拉伯没有5个,但每个国家/地区至少有不同的国家/地区编号)

做得好,

CREATE TABLE COUNTRY(id int PRIMARY KEY auto_increment, name VARCHAR(100))
SELECT distinct COUNTRY as name FROM TableB;

ALTER TABLE TableB Add column countryID int NOT NULL DEFAULT 0;

UPDATE TableB b, country c
set b.countryID = c.Id
where b.country = c.name;

ALTER TABLE TableB drop column country;

ALTER TABLE TableB add  FOREIGN KEY(countryID) REFERENCES country(id); 

有关分步操作,请参见更新的答案。我稍微更改了插入值,并注意到有一个编号问题(注意下面SQLFIDLE中如何跳过4,5,6)。怎么了@如回答中所述,每个国家都有一个唯一的id,但不是顺序的(查询只获取表中每个国家的最小id)。对于第二个版本(带有国家/地区表),您将拥有顺序值(在开始时)。