SQL百分位

哪两个常见的词关系如此密切,以至于你认为它们是一样的?对于我们数据库开发人员来说,它将是SQL数据库和统计数据。

甚至在数据库管理中也会出现一个常见的统计计算,那就是百分位数。

百分位数是一种统计度量,它允许我们将数据集分成相等的部分。百分位数的作用是提供对数据分布的洞察,这是我们如何理解值是如何分布的。

在本教程中,我们将学习如何在SQL中计算百分位数以将数据划分为不同的段。

样表

让我们首先设置一个基本表,其中包含用于演示的示例数据。这有助于我们说明计算百分位数的各种方法的行为和结果输出。

让我们创建一个名为“products”的表,其中包含杂货信息。“create table”子句如下:

创建表

INT主键AUTO_INCREMENT;

product_name VARCHAR (255),

类别VARCHAR (255),

price DECIMAL(10,2),

量INT,

expiration_date日期,

条形码长整型数字

);

一旦创建了表,就可以继续将示例数据添加到表中。我们可以使用下面的“insert”语句:

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

值('厨师帽25cm',

“面包房”,

24.67,

57岁的

“2023-09-09”,

2854509564204);

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

价值(“鹌鹑蛋罐头”、

“储藏室”,

17.99,

67年,

“2023-09-29”,

1708039594250);

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

价值(“咖啡-蛋诺卡布奇诺”,

“面包房”,

92.53,

10,

“2023-09-22”,

8704051853058);

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

价值('梨-多刺',

“面包房”,

65.29,

48,

“2023-08-23”,

5174927442238);

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

价值(“意面-天使的头发”,

“储藏室”,

48.38,

59岁的

“2023-08-05”,

8008123704782);

插入



产品(product_name,

类别,

价格,

量,

expiration_date,

条形码)

价值('Wine - Prosecco Valdobiaddene');

“生产”,

44.18,

3,

“2023-03-13”,

6470981735653);

最后,您应该得到如下表:

SQL百分位

可以猜到,计算百分位数的方法可能因数据库引擎的不同而不同。然而,最常用的方法是使用PERCENTILE_DISC()和PERCENTILE_CONT()函数。

这些函数是标准SQL规范(2003)的一部分。因此,PostgreSQL和Oracle都支持它。

PERCENTILE_CONT ()

让我们从PERCENTILE_CONT()函数开始。这个函数允许我们计算百分位数值作为数据集的一部分。

该函数返回插值值,该值可能不精确到数据集中的特定数据点。

函数语法如下:

perentile_cont(百分位)WITHIN GROUP (ORDER BY column_name) OVER ();

该函数接受以下参数:

  • 百分位数-指定所需的百分位数值(0.0到1.0)。
  • column_name—表示我们希望计算百分位数的列。
  • OVER() -它设置窗口函数来指定整个数据集。

使用该函数的示例如下:

选择

百分位数(0.5)在组内(按价格订购)除以()为中位数

产品;

注意:这个查询只适用于PostgreSQL,因为MySQL不支持使用WITHIN GROUP。

这将计算所提供数据的第50个百分位数。

PERCENTILE_DISC ()

我们可以使用PERCENTILE_DISC()函数直接从数据集中计算作为离散值的百分位数值。

该函数返回一个对应于实际数据点的值。

函数语法如下(PostgreSQL):

perentile_disc (perentile) WITHIN GROUP (ORDER BY column_name) OVER ();

使用示例输出如下:

选择

在GROUP (ORDER BY price) OVER()中,作为百分位数

产品;

这应该计算数据的第25个百分位数。

结论

本教程介绍了如何使用各种函数来计算SQL数据库中的百分位数。