所以假设我这样做
SELECT * FROM table t GROUP BY t.id
假设表中有多个行具有相同的id,那个id中只有一行最终会出现...我想mysql会命令结果具有相同的id并返回第一个或类似的东西。 ...我的问题是...... mysql如何执行此排序,是否有一种方法可以控制其排序,例如,它使用某个字段等?
答案 0 :(得分:1)
您可以GROUP BY
几个不同的列来排列结果分组的顺序。
SELECT * FROM table t GROUP BY t.id, t.foo, t.bar
答案 1 :(得分: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子句,它将任意选择其中一个。
答案 2 :(得分:0)
将此MySQL扩展用于标准SQL GROUP BY功能时,您无法控制服务器选择非聚合的非GROUP BY列的值。 MySQL documentation讨论了这个具体案例并明确指出
服务器可以自由选择每个组中的任何值,因此除非他们 是相同的,所选择的值是不确定的。而且, 添加a不会影响每组中的值的选择 ORDER BY子句。