分組排序函數——row_number()


1、MySQL8.0以上版本

用法1:無分組排序

Row_number() OVER(ORDER BY 字段 DESC)
例如:Row_number() OVER(ORDER BY 學生成績 DESC)
表示不分班級,所有學生的成績從高到低排序
用法2:分組排序
ROW_NUMBER() OVER(PARTITION BY 字段1 ORDER BY 字段2 DESC)
表示根據字段1分組,在分組內部根據字段2排序,這個函數計算的值就表示每組內部排序后的順序編號
例如:ROW_NUMBER() OVER(PARTITION BY 班級 ORDER BY 學生成績 DESC)
表示根據“班級”分組,在每個“班級”內部根據“學生成績”排序,這個函數計算的值就表示每組內部排序后的
順序編號
解釋:
ROW_NUMBER( )  起到了編號的功能
partition by  將相同數據進行分區
order by    使得數據按一定順序排序

2、MySQL5.7版本

用法1:無分組排序

例如:計算銷售人員的銷售額,結果按從高到低排序,查詢結果中要包含銷售的排名

SET @rank := 0;
SELECT
A.*,
@rank := @rank + 1 AS rank 
FROM
( SELECT sales_name, sum( sales ) FROM spm_order

GROUP BY sales_name

ORDER BY sum( sales ) DESC ) A

用法2:分組排序

例:計算銷售人員在不同城市的銷售額;

要求:結果根據銷售人員不同城市的銷售額進行分組排序(降序),並且查詢結果要包含分組排名

SET @r := 0,
@type := '';
SELECT
 @r :=
CASE WHEN @type = a.sales_name THEN
@r + 1 ELSE 1
END AS rowNum,
 @type := a.sales_name AS type,
  a.*
FROM
( SELECT sales_name, city, sum( sales ) FROM spm_order

GROUP BY sales_name, city

ORDER BY sales_name, sum( sales ) DESC ) a;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM