亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取每組成組SQL結果的最大值記錄

獲取每組成組SQL結果的最大值記錄

揚帆大魚 2019-06-05 11:16:25
獲取每組成組SQL結果的最大值記錄如何獲得包含每個分組集的最大值的行?我在這個問題上見過一些過于復雜的變體,但沒有一個能給出一個很好的答案。我試著把最簡單的例子放在一起:假設下面有這樣一個表,包括Person、Group和Aage列,那么您如何在每個組中得到年齡最大的人呢?(組內的平分應給出第一個字母結果)Person | Group | Age---Bob  | 1     | 32  Jill | 1     | 34  Shawn| 1     | 42  Jake | 2     | 29  Paul | 2     | 36  Laura| 2     | 39  期望的結果集:Shawn | 1     | 42    Laura | 2     | 39  
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

在MySQL中有一種非常簡單的方法可以做到這一點:

select?*?from?(select?*?from?mytable?order?by?`Group`,?age?desc,?Person)?xgroup?by?`Group`

這是因為在MySQL中你可以聚合非組按列,在這種情況下,MySQL只返回第一劃(船)。解決方案是首先對數據進行排序,這樣,對于每個組,您想要的行首先是第一個,然后按您想要的值的列進行分組。

避免復雜的子查詢,這些子查詢試圖查找max()等等,以及當有多個具有相同最大值的行時(與其他答案相同)時返回多行的問題。

注:這是一個只使用MySQL解決辦法。我知道的所有其他數據庫都會拋出一個SQL語法錯誤,消息是“非聚合列不在GROUP BY子句中列出”或類似的。因為此解決方案使用無證行為時,越謹慎的人可能會想要包含一個測試來斷言它。遺骸MySQL的未來版本應該會改變這種行為。

5.7版本更新:

自5.7版起,sql-mode設置包括ONLY_FULL_GROUP_BY默認情況下,因此要使此工作,必須有此選項(編輯服務器的選項文件以刪除此設置)。


查看完整回答
反對 回復 2019-06-05
?
慕容708150

TA貢獻1831條經驗 獲得超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

它是如何運作的:

中的每一行進行匹配。o的所有行b列中具有相同值的Group在列中有更大的價值Age..任何一排o在列中沒有其組的最大值。Age將匹配一行或多行。b.

這個LEFT JOIN使它與組中年齡最大的人(包括在他們組中的獨居者)匹配一排滿是NULLS___b(“群體中年齡不算大”)。
使用INNER JOIN使這些行不匹配,它們將被忽略。

這個WHERE子句只保留具有NULL在從b..他們是每個群體中最年長的人。

進一步讀數

這本書解釋了這個解決方案和其他許多問題。SQL反模式:避免數據庫編程的缺陷


查看完整回答
反對 回復 2019-06-05
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

您可以連接到一個子查詢,該子查詢將MAX(Group)Age..這種方法在大多數RDBMS中都是可移植的。

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;


查看完整回答
反對 回復 2019-06-05
  • 2 回答
  • 0 關注
  • 1158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號