MySQL中的GROUP BY子句将具有不同值的记录分组

时间:2018-04-05 14:46:33

标签: mysql sql group-by

MySQL GROUP BY子句将记录分组,即使它们具有不同的值。

但是,我希望它与DB2 SQL一样,以便如果记录不包含完全相同的信息,则它们不会被分组。

目前在MySQL中:

id姓名

阿曼达

A Ana

Group by id将随机返回1条记录(当然除非使用聚合条款)

但是在DB2 SQL中,相同的Group by id不会对这些记录进行分组:返回2条记录,并且从不执​​行以下操作:在不使用聚合函数进行分组时随机选取其中一个值。

3 个答案:

答案 0 :(得分:1)

首先,id是不是表的主键的列的错误名称。但这与你的问题无关。

此查询:

select id, name
from t
group by id;

几乎在MySQL以外的任何数据库中都会返回错误。问题是name不在group by中,并且不是聚合函数的参数。失败是ANSI标准的行为,不受MySQL的尊重。

编写查询的典型方法是:

select id, max(name)
from t
group by id;

这应该适用于所有数据库(假设name不是max()不起作用的某种模糊类型。

或者,如果你想要每个名字,那么:

select id, name
from t
group by id, name;

或更简单:

select distinct id, name
from t;

在MySQL中,您可以通过为数据库/会话设置ONLY_FULL_GROUP_BY来获得ANSI标准行为。然后,MySQL将返回错误,就像DB2在这种情况下那样。

最新版本的MySQL默认设置为ONLY_FULL_GROUP_BY

答案 1 :(得分:0)

我不认为有一种自动方式可以做到这一点,但使用

GROUP BY id, name

会为您提供您正在寻找的解决方案

答案 2 :(得分:0)

mysql中的group by将根据设置的字段对记录进行分组。把它想象成:它得到一个而其他人不会出现。例如,它可用于计算在表格上重复ID的次数:

select count(id), id from table group by id

然而,您可以通过多个字段实现您的目的,分组:

select * from table group by id, name