分組排序函數——row_number()

一、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    使得數據按必定順序排序函數

二、MySQL5.7版本spa

用法1:無分組排序

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

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

GROUP BY sales_name it

ORDER BY sum( sales ) DESC ) Aio

用法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 co

GROUP BY sales_name, city background

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

相關文章
相關標籤/搜索