第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

獲取每組成組SQL結(jié)果的最大值記錄

獲取每組成組SQL結(jié)果的最大值記錄

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

2 回答

?
POPMUISE

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è)置)。


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

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)作的:

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

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

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

進(jìn)一步讀數(shù)

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


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

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個贊

您可以連接到一個子查詢,該子查詢將MAX(Group)Age..這種方法在大多數(shù)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;


查看完整回答
反對 回復(fù) 2019-06-05
  • 2 回答
  • 0 關(guān)注
  • 1155 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號