MySQL GROUP BY
子句将记录分组,即使它们具有不同的值。
但是,我希望它与DB2 SQL一样,以便如果记录不包含完全相同的信息,则它们不会被分组。
目前在MySQL中:
id姓名
阿曼达
A Ana
Group by id
将随机返回1条记录(当然除非使用聚合条款)
但是在DB2 SQL中,相同的Group by id
不会对这些记录进行分组:返回2条记录,并且从不执行以下操作:在不使用聚合函数进行分组时随机选取其中一个值。
答案 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