Mysql

按 MYSQL 8.x 分組的每組值的 SELECT 最大值排序

  • March 23, 2021

我需要獲取一組記錄的最大年齡,即使年齡是重複的 ORDER BY the age DESC

Person | Group | Age
---
Bob  | 1     | 32  
Jill | 1     | 34  
Shawn| 1     | 42  
Jake | 2     | 29  
Paul | 2     | 36  
Laura| 2     | 39  
Lalo |3      |50
Julia|3      |50 
Travis|3     |18



Wanted results: 
Julia | 3     | 50
Shawn | 1     | 42    
Laura | 2     | 39 

我嘗試了這個解決方案,當應用到我的真實表時,我帶來了重複的年齡記錄,我無法通過“列”DESC 來訂購

我還嘗試在查詢結束時執行 GROUP BY Group 和 ORDER BY Age DESC,這使值分組正確,但 Age 值不正確

在 MySQL 8.0 上,一種解決方案是以這種方式使用ROW_NUMBER函式:

請注意,我使用Grp了而不是Group,因為它是保留字。

SELECT
 Person,
 Grp,
 Age
FROM
 (SELECT
   Person, Grp, Age,
   ROW_NUMBER() OVER (PARTITION BY Grp ORDER BY Age DESC) Rn
 FROM
   Ppl) a
WHERE
 Rn = 1
ORDER BY
 Age DESC;
人 | 組 | 年齡
:----- | --: | --:
啦啦啦 3 | 50
肖恩 | 1 | 42
勞拉 | 2 | 39

除非您在 ORDER BY 子句中添加另一列,否則無法獲得 Julia 而不是 Lalo。

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/287544