3 回答

TA貢獻1966條經(jīng)驗 獲得超4個贊
在這一點上閱讀MySQL文檔。
簡而言之,MySQL出于性能考慮,允許從GROUP BY中刪除某些列,但是,只有在被省略的列都具有相同值(在分組內(nèi))的情況下,此方法才有效,否則,查詢返回的值的確是不確定的,例如在這篇文章中被其他人正確猜到了。確保添加ORDER BY子句不會重新引入任何形式的確定性行為。
盡管不是問題的核心,但本示例說明如何使用*而不是對所需列進行顯式枚舉通常是一個壞主意。
摘自MySQL 5.0文檔:
使用此功能時,每個組中的所有行應具有相同的值
對于GROUP BY部分中省略的列。服務器是免費的
從組中返回任何值,因此結(jié)果是不確定的,除非
所有值都相同。

TA貢獻1789條經(jīng)驗 獲得超10個贊
這有點晚了,但我會提出來供將來參考。
GROUP BY接收具有重復項的第一行,并丟棄結(jié)果集中第二行之后的所有匹配行。因此,如果杰克和湯姆具有相同的部門,則在普通SELECT中首先出現(xiàn)的人將是GROUP BY中的結(jié)果行。
如果要控制列表中第一個出現(xiàn)的內(nèi)容,則需要執(zhí)行ORDER BY。但是,SQL不允許ORDER BY出現(xiàn)在GROUP BY之前,因為它將引發(fā)異常。解決此問題的最佳方法是在子查詢中執(zhí)行ORDER BY,然后在外部查詢中執(zhí)行GROUP BY。這是一個例子:
SELECT * FROM (SELECT * FROM emp ORDER BY name) as foo GROUP BY dept
這是我發(fā)現(xiàn)的性能最好的技術(shù)。我希望這可以幫助某人。

TA貢獻1831條經(jīng)驗 獲得超4個贊
我發(fā)現(xiàn)最好的辦法是考慮不支持這種類型的查詢。在大多數(shù)其他數(shù)據(jù)庫系統(tǒng)中,不能在GROUP BY子句中或HAVING,SELECT或ORDER BY子句中的聚合函數(shù)中都不包含列。
相反,請考慮您的查詢讀?。?/p>
SELECT ANY(name), dept, ANY(salary)
FROM emp
GROUP BY dept;
...因為這是怎么回事。
希望這可以幫助....
添加回答
舉報