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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/20733.html
標籤:Windows
上一篇:sqlldr bat遇到的問題
