学习SQL服务器中位数函数

654 阅读3分钟

统计学上的中位数,或简称,是指将一组数值分成两半的一个数值。你可以认为中位数是一组按升序或降序排序的数值内的中间值。

中位数通常表示最大或最小的值,这取决于所引用的集合。例如,在一个有数值的集合中。

{100,200,300,400,500,600,700,800,900}

上述集合中的中值是500。因此,500是第一个集合中的第四大值,也是第二个集合中的第四小值。

本文将学习如何在SQL Server中计算一个列。请记住,在SQL Server中没有特定的函数来执行统计中值。

基础知识

让我们从基础知识开始,了解如何计算一组数值的中位数。

在统计学中,为了计算一组数值的中位数,我们首先要把这些数值按照升序或降序排列。一旦我们对数据进行了逻辑排序,我们就确定中间值。

如果这个集合包含奇数的数值,我们就认为中间的数值是这个特定集合的中值。

但是,如果这个集合包含偶数个值,我们就确定这个集合中的两个中间值,把它们加起来,然后除以2。

我们可以把计算一个特定集合的中位数的公式表示为:。

资料来源维基百科。

在SQL Server中计算中位数

让我们学习如何在SQL Server中计算中位数。让我们从设置演示信息开始,如下面的查询中所示。

创建数据库。

CREATE DATABASE median;

使用该数据库

USE median;

创建一个带有列的表,如图所示:

USE median;
CREATE TABLE sample_data (
        id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
        product VARCHAR(50),
        price money,
        quantity INT
);
INSERT INTO sample_data(product, price, quantity)
VALUES ('Adjustable Chair', 380.40, 1),
           ('Windproof Umbrella', 26.77, 3),
           ('Amazon Echo Dot', 39.99, 5),
           ('Air Purifier', 99.99, 6),
           ('4K Security Camera', 109.85, 4),
           ('Fitness Tracker', 67.49, 10),
           ('Touch Screen Gloves', 12.99, 8),
           ('Apple AirPods Pro', 329.99, 5),
           ('Sony WH-1000XM4', 320.99, 5),
           ('MacBook Air', 999.99, 10),
           ('Dell XPS 13', 1170.00, 6);

一旦我们有了样本数据,我们就可以计算出所提供数据的中位数。

方法1--SQL排名和CTE

我们可以用第一种方法来计算数值的中位数,就是排位函数和通用表表达式。这种方法即使在旧版本的SQL Server中也能使用。

其工作原理是将集合分成50%的最高值和50%的最低值。

我们可以使用这个方法,如下面的查询示例所示。

SELECT
(
(SELECT MAX(price) FROM
 (SELECT top 50 percent price FROM sample_data ORDER BY price) AS bottomhalf)
 +
 (SELECT MIN(price) FROM
  (SELECT top 50 percent price FROM sample_data ORDER BY price DESC) AS tophalf)
) / 2 AS median

得到的数值是这样的:

median
---------------------
109.85
(1 ROW affected)

方法2 - Percentile_cont

如前所述,在写这篇文章的时候,SQL Server中没有中位数函数。但是,我们可以使用PERCENTILE_CONT函数来实现同样的功能。

该函数返回在定义的一组数值中排在特定百分比的数值。因此,如果我们将百分比值设置为0.5,该函数将返回一个中值。

考虑一下下面的查询示例:

SELECT product, price, percentile_cont(0.5)
           within-GROUP (ORDER BY price)
           OVER (partition BY product) AS median
           FROM sample_data ORDER BY product DESC;

该查询返回的输出结果为。

结束语

本文讨论了统计学中位数以及在SQL Server中计算列的中位数的各种方法。