SELECT seller_id FROM (SELECT seller_id , RANK() OVER(ORDER BY SUM(price) DESC) AS r FROM Sales GROUP BY seller_id) s WHERE s.r=1; 作者:SunnyCCCh 連結:https://leetcode.cn/problems/sales-analysis-i/solutions/868818/partition-by-he-group-by-de-shi-yong-qu-nts8m/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 SELECT seller_id FROM (SELECT seller_id , RANK() OVER(PARTITION BY seller_id ORDER BY SUM(price) DESC) AS r FROM Sales ) s WHERE s.r=1; 作者:SunnyCCCh 連結:https://leetcode.cn/problems/sales-analysis-i/solutions/868818/partition-by-he-group-by-de-shi-yong-qu-nts8m/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 --案例1 這個案例等於是將 SELECT SELLER_ID , SUM(PRICE), DENSE_RANK() OVER( ORDER BY SUM(PRICE) DESC ) RN --不分割槽. 留意最下面有group by ,groupby級別高於開窗函式計算順序這個是重點. FROM SALES A GROUP BY SELLER_ID --如下結果: | seller_id | sum(price) | dense_rank() over( order by sum(price) desc ) | | --------- | ---------- | ---------------------------------------------- | | 1 | 2800 | 1 | | 3 | 2800 | 1 | | 2 | 800 | 2 |
另外需要注意的是 欄位中有 partition by 然後最後面還要 group by 的話,這種sql 沒有意義的,要重點體會一下。
注意子查詢裡面的執行順序,是先from sales,再group by seller_id,最後再select,這樣得到的就是seller_id和每個seller_id對應的sum(price)的排名。
如果換成partition by seller_id就是在每個seller_id組內對price排序了
結合1076和1077題一起體會下區別。
作者:SunnyCCCh
連結:https://leetcode.cn/problems/sales-analysis-i/solutions/868818/partition-by-he-group-by-de-shi-yong-qu-nts8m/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。