Sql排名函數的例子

在SQL中,排名函式用於對結果集中的行進行排序並為其分配排名。排名函式通常用於解決諸如「每個組的前N個」、「每個組的最後N個」、「每個組的唯一值計數」等問題。以下是一些常用的排名函式的例子:

  1. RANK函式: 這個函式用於對結果集中的行進行排名,如果存在並列的行,則它們的排名相同,後續的行排名將跳過這些並列的排名。

    SELECT RANK() OVER (ORDER BY column_name ASC) AS Rank
    FROM table_name;
  2. DENSE_RANK函式: 這個函式與RANK函式類似,不同之處在於,如果存在並列的行,則它們的排名相同,但後續的行排名不會跳過這些並列的排名。

    SELECT DENSE_RANK() OVER (ORDER BY column_name ASC) AS Rank
    FROM table_name;
  3. PERCENT_RANK函式: 這個函式返回一個介於0和1之間的值,表示當前行的百分比排名。

    SELECT PERCENT_RANK() OVER (ORDER BY column_name ASC) AS PercentRank
    FROM table_name;
  4. CUME_DIST函式: 這個函式返回一個介於0和1之間的值,表示當前行的累積分布排名。

    SELECT CUME_DIST() OVER (ORDER BY column_name ASC) AS CumeDist
    FROM table_name;
  5. NTILE函式: 這個函式將結果集分為若干個桶(tile),並返回當前行所在的桶的編號。

    SELECT NTILE(num_buckets) OVER (ORDER BY column_name ASC) AS Tile
    FROM table_name;

以上函式都可以在SQL的SELECT子句中使用,其中OVER()子句用於指定排名是基於整個結果集還是基於某個組(通過GROUP BY)。

例如,如果我們有一個名為Sales的表,包含EmployeeSales兩個欄位,我們想要查看每個員工的總銷售額以及他們在所有員工中的排名,我們可以這樣做:

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則支持得更早。在使用這些函式之前,請確保你的資料庫管理系統支持它們。