2 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個贊
在MySQL中有一種非常簡單的方法可以做到這一點(diǎn):
select?*?from?(select?*?from?mytable?order?by?`Group`,?age?desc,?Person)?xgroup?by?`Group`
這是因?yàn)樵贛ySQL中你可以不聚合非組按列,在這種情況下,MySQL只返回第一劃(船)。解決方案是首先對數(shù)據(jù)進(jìn)行排序,這樣,對于每個組,您想要的行首先是第一個,然后按您想要的值的列進(jìn)行分組。
避免復(fù)雜的子查詢,這些子查詢試圖查找max()
等等,以及當(dāng)有多個具有相同最大值的行時(與其他答案相同)時返回多行的問題。
注:這是一個只使用MySQL解決辦法。我知道的所有其他數(shù)據(jù)庫都會拋出一個SQL語法錯誤,消息是“非聚合列不在GROUP BY子句中列出”或類似的。因?yàn)榇私鉀Q方案使用無證行為時,越謹(jǐn)慎的人可能會想要包含一個測試來斷言它。遺骸MySQL的未來版本應(yīng)該會改變這種行為。
5.7版本更新:
自5.7版起,sql-mode
設(shè)置包括ONLY_FULL_GROUP_BY
默認(rèn)情況下,因此要使此工作,必須不有此選項(xiàng)(編輯服務(wù)器的選項(xiàng)文件以刪除此設(shè)置)。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個贊
SELECT o.*FROM `Persons` o # 'o' from 'oldest person in group' LEFT JOIN `Persons` b # 'b' from 'bigger age' ON o.Group = b.Group AND o.Age < b.AgeWHERE b.Age is NULL # bigger age not found
它是如何運(yùn)作的:
o
b
Group
Age
o
Age
b
.
LEFT JOIN
NULL
b
INNER JOIN
WHERE
NULL
b
進(jìn)一步讀數(shù)

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個贊
MAX(Group)
Age
SELECT t1.*FROM yourTable t1INNER JOIN( SELECT `Group`, MAX(Age) AS max_age FROM yourTable GROUP BY `Group`) t2 ON t1.`Group` = t2.`Group` AND t1.Age = t2.max_age;
添加回答
舉報(bào)