2012-09-27 84 views
1

所以想我做記錄如何在mysql組中排序?

SELECT * FROM table t GROUP BY t.id 

假設有在具有相同ID的表格多行,該ID的只有一行將最終出來......我想,MySQL會下令將具有相同的結果ID和返回第一個或什麼....我的問題是...如何執行這種排序的MySQL,有沒有一種方法,我可以控制其排序,例如,它使用某個領域等?

回答

1

您可以用GROUP BY幾個不同的列來安排結果分組的順序。

SELECT * FROM table t GROUP BY t.id, t.foo, t.bar 
+0

這與MySQL文檔中所說的完全相反:「此外,從每個組中選擇的值不能通過添加ORDER BY子句來影響。」請參閱http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html。 –

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子句,它將任意選擇其中的一個。

0

將此擴展用於標準SQL GROUP BY功能時,您無法控制服務器選擇非聚合的非GROUP BY列的值。所述MySQL documentation討論這種具體情況下,明確規定,

該服務器是可以自由選擇從每個組的任何值,所以除非它們 是相同的,所選擇的值是不確定的。此外,通過添加 ORDER BY子句,不會影響每個組中的值的選擇 。