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

MySQL中的GROUPBY子句将具有不同值的记录分组,mysql,sql,group-by,Mysql,Sql,Group By,MySQL GROUP BY子句组记录,即使它们具有不同的值 但是,我希望它与DB2SQL一样,这样,如果记录不包含完全相同的信息,它们就不会被分组 目前在MySQL中用于: 身份证名称 阿曼达 安娜 当然,除非使用聚合子句,否则GROUPBY id将随机返回1条记录 然而,在DB2SQL中,相同的GROUPBYID不会对这些记录进行分组:返回2条记录,并且在分组时不会在不使用聚合函数的情况下随机选取其中一个值 我认为除了使用 GROUP BY id, name 将为您提供您正在寻找的解决方案

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

但是,我希望它与DB2SQL一样,这样,如果记录不包含完全相同的信息,它们就不会被分组

目前在MySQL中用于:

身份证名称

阿曼达

安娜

当然,除非使用聚合子句,否则GROUPBY id将随机返回1条记录


然而,在DB2SQL中,相同的GROUPBYID不会对这些记录进行分组:返回2条记录,并且在分组时不会在不使用聚合函数的情况下随机选取其中一个值

我认为除了使用

GROUP BY id, name

将为您提供您正在寻找的解决方案,mysql中的Group by将根据设置的字段对记录进行分组。可以这样想:它得到一个,而其他的不会出现。例如,它使用以下方法计算该ID在表上重复的次数:

select count(id), id from table group by id
但是,为了达到目的,您可以通过多个字段对以下行中的某些内容进行分组:

select * from table group by id, name
首先,对于不是表主键的列,id是一个坏名称。但这与你的问题无关

此查询:

select id, name
from t
group by id;
在MySQL以外的几乎所有数据库中返回错误。问题是名称不在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中,您可以通过设置数据库/会话来获得ANSI标准行为。MySQL将返回一个错误,就像DB2在本例中所做的那样


MySQL的最新版本在默认情况下只设置了\u FULL\u GROUP\u。

是,因为您是按id分组的,所以它将返回一个随机名称,很可能总是第一个名称。也许您希望结果按id、名称分组,这里的故事的寓意是不要在不包括所有选定的非聚合字段的情况下使用GROUP by。但是,您可以按多个元素分组。如果没有,我想你最好的选择是省去mysql的group by,并应用where标准。感谢你的快速回复,但是我经常需要将非聚合字段和聚合字段组合在一起,并且删除当前重复的记录,这给我带来了操作风险…这看起来与我发现的类似。可能原因是我只拥有对数据库的读取权限,或者我使用的是HeidiSQL客户端,但我没有设法按值仅更改\u FULL\u GROUP\u…MySQL将返回一个错误,就像DB2在本例中所做的那样。至少对于我的DB2数据库来说,这实际上是不正确的。在我的例子中,它只是不将这些记录分组。