WINDOW FUNCTION CUME_DIST

description

CUME_DIST (Cumulative Distribution) 是一种窗口函数,它常用于计算当前行值在排序后结果集中的相对排名。它返回的是当前行值在结果集中的百分比排名,即在排序后的结果中小于或等于当前行值的行数与结果集总行数的比例。

  1. CUME_DIST() OVER(partition_by_clause order_by_clause)

example

假设有一个表格 sales 包含销售数据,其中包括销售员姓名 (sales_person)、销售额 (sales_amount) 和销售日期 (sales_date)。我们想要计算每个销售员在每个销售日期的销售额占当日总销售额的累积百分比。

  1. SELECT
  2. sales_person,
  3. sales_date,
  4. sales_amount,
  5. CUME_DIST() OVER (PARTITION BY sales_date ORDER BY sales_amount ASC) AS cumulative_sales_percentage
  6. FROM
  7. sales;

假设表格 sales 中的数据如下:

  1. +------+--------------+------------+--------------+
  2. | id | sales_person | sales_date | sales_amount |
  3. +------+--------------+------------+--------------+
  4. | 1 | Alice | 2024-02-01 | 2000 |
  5. | 2 | Bob | 2024-02-01 | 1500 |
  6. | 3 | Alice | 2024-02-02 | 1800 |
  7. | 4 | Bob | 2024-02-02 | 1200 |
  8. | 5 | Alice | 2024-02-03 | 2200 |
  9. | 6 | Bob | 2024-02-03 | 1900 |
  10. | 7 | Tom | 2024-02-03 | 2000 |
  11. | 8 | Jerry | 2024-02-03 | 2000 |
  12. +------+--------------+------------+--------------+

执行上述 SQL 查询后,结果将显示每个销售员在每个销售日期的销售额以及其在该销售日期的累积百分比排名。

  1. +--------------+------------+--------------+-----------------------------+
  2. | sales_person | sales_date | sales_amount | cumulative_sales_percentage |
  3. +--------------+------------+--------------+-----------------------------+
  4. | Bob | 2024-02-01 | 1500 | 0.5 |
  5. | Alice | 2024-02-01 | 2000 | 1 |
  6. | Bob | 2024-02-02 | 1200 | 0.5 |
  7. | Alice | 2024-02-02 | 1800 | 1 |
  8. | Bob | 2024-02-03 | 1900 | 0.25 |
  9. | Tom | 2024-02-03 | 2000 | 0.75 |
  10. | Jerry | 2024-02-03 | 2000 | 0.75 |
  11. | Alice | 2024-02-03 | 2200 | 1 |
  12. +--------------+------------+--------------+-----------------------------+

在这个例子中,CUME_DIST() 函数根据每个销售日期对销售额进行排序,然后计算每个销售员在该销售日期的销售额占当日总销售额的累积百分比。由于我们使用了 PARTITION BY sales_date,所以计算是在每个销售日期内进行的,销售员在不同日期的销售额被分别计算。

keywords

  1. WINDOW,FUNCTION,CUME_DIST