MariaDB PERCENT_RANK() 函数的基础用法与实例

MariaDB PERCENT_RANK() 函数用来计算一个值在一组值中的相对排名百分比。

发布于

MariaDB PERCENT_RANK() 函数用来计算一个值在一组值中的相对排名百分比。这个函数在统计分析、数据挖掘等领域中非常有用,尤其是在需要评估元素在整体分布中的位置时。

语法

MariaDB PERCENT_RANK() 函数的语法如下:

PERCENT_RANK() OVER (
    ORDER BY column_name
)

该函数没有参数,但需要在 OVER 子句中指定 ORDER BY,以确定值的排列顺序。

实例

计算考试成绩的百分等级

以下示例展示了如何计算学生考试成绩的百分等级。

DROP TABLE IF EXISTS exam_scores;
CREATE TABLE exam_scores (
    student_id INT,
    score INT
);
INSERT INTO exam_scores VALUES (1, 75), (2, 83), (3, 91), (4, 68), (5, 87);

SELECT student_id, score, PERCENT_RANK() OVER (
    ORDER BY score
) AS percent_rank FROM exam_scores;

以下是该语句的输出:

+------------+-------+--------------+
| student_id | score | percent_rank |
+------------+-------+--------------+
|          4 |    68 | 0.0000000000 |
|          1 |    75 | 0.2500000000 |
|          2 |    83 | 0.5000000000 |
|          5 |    87 | 0.7500000000 |
|          3 |    91 | 1.0000000000 |
+------------+-------+--------------+

这个输出显示了每个学生的成绩和相应的百分等级。

销售数据的百分等级

在此示例中,我们将计算销售员的销售额百分等级。

DROP TABLE IF EXISTS sales_data;
CREATE TABLE sales_data (
    salesperson_id INT,
    sales_amount DECIMAL(10, 2)
);
INSERT INTO sales_data VALUES (1, 12000.00), (2, 18000.00), (3, 24000.00), (4, 15000.00);

SELECT salesperson_id, sales_amount, PERCENT_RANK() OVER (
    ORDER BY sales_amount
) AS percent_rank FROM sales_data;

以下是该语句的输出:

+----------------+--------------+--------------+
| salesperson_id | sales_amount | percent_rank |
+----------------+--------------+--------------+
|              1 |     12000.00 | 0.0000000000 |
|              4 |     15000.00 | 0.3333333333 |
|              2 |     18000.00 | 0.6666666667 |
|              3 |     24000.00 | 1.0000000000 |
+----------------+--------------+--------------+

这个输出显示了每个销售员的销售额和相应的百分等级。

在分组中使用 PERCENT_RANK()

假设我们有一个包含多个部门销售数据的表,我们可以使用 PERCENT_RANK() 来计算每个部门内销售员的百分等级。

DROP TABLE IF EXISTS department_sales;
CREATE TABLE department_sales (
    department_id INT,
    salesperson_id INT,
    sales_amount DECIMAL(10, 2)
);
INSERT INTO department_sales VALUES (1, 1, 10000.00), (1, 2, 15000.00), (2, 3, 20000.00), (2, 4, 25000.00);

SELECT department_id, salesperson_id, sales_amount, PERCENT_RANK() OVER (
    PARTITION BY department_id ORDER BY sales_amount
) AS percent_rank FROM department_sales;

以下是该语句的输出:

+---------------+----------------+--------------+--------------+
| department_id | salesperson_id | sales_amount | percent_rank |
+---------------+----------------+--------------+--------------+
|             1 |              1 |     10000.00 | 0.0000000000 |
|             1 |              2 |     15000.00 | 1.0000000000 |
|             2 |              3 |     20000.00 | 0.0000000000 |
|             2 |              4 |     25000.00 | 1.0000000000 |
+---------------+----------------+--------------+--------------+

这个输出显示了每个部门内销售员的销售额和相应的百分等级。

处理相同值的百分等级

当有相同的值时,PERCENT_RANK() 函数会为这些值分配相同的百分等级。

INSERT INTO department_sales VALUES (1, 3, 15000.00);
SELECT department_id, salesperson_id, sales_amount, PERCENT_RANK() OVER (
    PARTITION BY department_id ORDER BY sales_amount
) AS percent_rank FROM department_sales WHERE department_id = 1;

以下是该语句的输出:

+---------------+----------------+--------------+--------------+
| department_id | salesperson_id | sales_amount | percent_rank |
+---------------+----------------+--------------+--------------+
|             1 |              1 |     10000.00 | 0.0000000000 |
|             1 |              2 |     15000.00 | 0.5000000000 |
|             1 |              3 |     15000.00 | 0.5000000000 |
+---------------+----------------+--------------+--------------+

这个输出显示了在有相同销售额的情况下,销售员的百分等级是相同的。

使用 PERCENT_RANK() 进行数据分析

PERCENT_RANK() 函数可以用于更复杂的数据分析,比如计算每个产品的销售额在所有产品销售额中的百分等级。

DROP TABLE IF EXISTS product_sales;
CREATE TABLE product_sales (
    product_id INT,
    sales_amount DECIMAL(10, 2)
);
INSERT INTO product_sales VALUES (1, 32000.00), (2, 28000.00), (3, 34000.00), (4, 31000.00);

SELECT product_id, sales_amount, PERCENT_RANK() OVER (
    ORDER BY sales_amount
) AS percent_rank FROM product_sales;

以下是该语句的输出:

+------------+--------------+--------------+
| product_id | sales_amount | percent_rank |
+------------+--------------+--------------+
|          2 |     28000.00 | 0.0000000000 |
|          4 |     31000.00 | 0.3333333333 |
|          1 |     32000.00 | 0.6666666667 |
|          3 |     34000.00 | 1.0000000000 |
+------------+--------------+--------------+

这个输出显示了每个产品的销售额和相应的百分等级。

相关函数

以下是几个与 MariaDB PERCENT_RANK() 相关的几个函数:

  • MariaDB RANK() 函数用来根据指定的列计算每行的排名。
  • MariaDB DENSE_RANK() 函数用来计算每行的排名,相同值的行会获得相同的排名。
  • MariaDB CUME_DIST() 函数用来计算累积分布的百分比。

结论

MariaDB 的 PERCENT_RANK() 函数是一个强大的工具,可以帮助我们在各种数据集中评估元素的相对位置。无论是在学术研究、市场分析还是业绩评估中,PERCENT_RANK() 都能提供有价值的洞察。通过本文的介绍和实例,您应该能够理解并应用这个函数来进行有效的数据分析和决策支持。在进行数据排名和百分比计算时,PERCENT_RANK() 函数是一个不可或缺的工具。