GROUPBY 和开窗函数执行顺序的问题
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。