Sql排名函數的例子
在SQL中,排名函式用於對結果集中的行進行排序並為其分配排名。排名函式通常用於解決諸如「每個組的前N個」、「每個組的最後N個」、「每個組的唯一值計數」等問題。以下是一些常用的排名函式的例子:
-
RANK函式: 這個函式用於對結果集中的行進行排名,如果存在並列的行,則它們的排名相同,後續的行排名將跳過這些並列的排名。
SELECT RANK() OVER (ORDER BY column_name ASC) AS Rank FROM table_name;
-
DENSE_RANK函式: 這個函式與RANK函式類似,不同之處在於,如果存在並列的行,則它們的排名相同,但後續的行排名不會跳過這些並列的排名。
SELECT DENSE_RANK() OVER (ORDER BY column_name ASC) AS Rank FROM table_name;
-
PERCENT_RANK函式: 這個函式返回一個介於0和1之間的值,表示當前行的百分比排名。
SELECT PERCENT_RANK() OVER (ORDER BY column_name ASC) AS PercentRank FROM table_name;
-
CUME_DIST函式: 這個函式返回一個介於0和1之間的值,表示當前行的累積分布排名。
SELECT CUME_DIST() OVER (ORDER BY column_name ASC) AS CumeDist FROM table_name;
-
NTILE函式: 這個函式將結果集分為若干個桶(tile),並返回當前行所在的桶的編號。
SELECT NTILE(num_buckets) OVER (ORDER BY column_name ASC) AS Tile FROM table_name;
以上函式都可以在SQL的SELECT子句中使用,其中OVER()
子句用於指定排名是基於整個結果集還是基於某個組(通過GROUP BY)。
例如,如果我們有一個名為Sales
的表,包含Employee
和Sales
兩個欄位,我們想要查看每個員工的總銷售額以及他們在所有員工中的排名,我們可以這樣做:
SELECT Employee, SUM(Sales) AS Total_Sales,
RANK() OVER (ORDER BY SUM(Sales) DESC) AS Rank
FROM Sales
GROUP BY Employee;
這個查詢將返回每個員工的銷售額以及他們在所有員工中的排名。
請注意,這些函式的可用性取決於SQL資料庫管理系統(如MySQL、SQL Server、Oracle等)的版本和支持的特性。例如,MySQL在5.7版本之前不支持視窗函式,而SQL Server和Oracle則支持得更早。在使用這些函式之前,請確保你的資料庫管理系統支持它們。