1

所以假设我这样做

SELECT * FROM table t GROUP BY t.id 

假设表中有多行具有相同的 id,最终只会出现该 id 的一行......我想 mysql 将对具有相同 id 的结果进行排序并返回第一个或其他东西......我的问题是......mysql如何执行这个排序,有没有办法可以控制它的排序,例如,它使用某个字段等?

4

3 回答 3

1

您可以GROUP BY使用几个不同的列来排列结果分组的顺序。

SELECT * FROM table t GROUP BY t.id, t.foo, t.bar
于 2012-09-27T19:57:37.967 回答
0

在严格正确的 SQL 中,当您使用 GROUP BY 时,所有被选择的值必须是在 GROUP BY 子句中命名的列或聚合函数。MySQL 允许您违反此规则,除非您设置了only_full_group_by模式。但是,尽管它允许您执行此类查询,但它没有指定将为每个分组列选择哪一行。

如果要选择与其他列的最大值或最小值相对应的行,可以执行以下操作:

SELECT a.*
FROM table a
JOIN (SELECT id, max(somecol) maxcol
      FROM table
      GROUP BY id) b
ON a.id = b.id
AND a.somecol = b.maxcol

请注意,如果它们都具有最大值,则每个 ID 仍然可以返回多行。您可以添加最终的 GROUP BY 子句,它将任意选择其中一个。

于 2012-09-27T21:09:36.737 回答
0

当将此 MySQL 扩展用于标准 SQL GROUP BY 功能时,您无法控制服务器选择非聚合、非 GROUP BY 列的哪些值。MySQL 文档讨论了这种特定情况并明确指出

服务器可以自由地从每个组中选择任何值,因此除非它们相同,否则选择的值是不确定的。此外,从每个组中选择值不会受到添加 ORDER BY 子句的影响。

于 2012-09-27T21:25:33.630 回答