我一直在寻找互联网,似乎没有与我的情况相匹配的答案。
我正在努力计算 SQL Server 中的确切下四分位数和上四分位数。我知道 SQL Server 有一个有助于计算四分位数的内置函数,即 NTILE 函数。但这对我的情况来说还不够。
给定下表的值(请注意,该表包含的产品和价格比下表中的要多):
平均价格 | 产品编号 | 年 |
---|---|---|
45.7820 | 2 | 2015 |
46.0142 | 2 | 2016 |
59.0133 | 2 | 2017 |
60.1707 | 2 | 2018 |
62.6600 | 2 | 2019 |
我正在运行以下查询:
SELECT
AveragePrice
,NTILE(4) OVER (
PARTITION BY ProductNumber ORDER BY AveragePrice
) AS Quartile
FROM products
这给出了以下结果:
平均价格 | 四分位数 |
---|---|
45.7820 | 1 |
46.0142 | 1 |
59.0133 | 2 |
60.1707 | 3 |
62.6600 | 4 |
对于完整的上下文,它的整体查询如下所示:
SELECT ProductNumber
,MIN(AveragePrice) Minimum
,MAX(CASE
WHEN Quartile = 1
THEN AveragePrice
END) AS Quartile_1
,
MAX(CASE
WHEN Quartile = 3
THEN AveragePrice
END) AS Quartile_3
,MAX(AveragePrice) Maximum
,COUNT(Quartile) AS 'Number of items'
FROM (
SELECT ProductNumber
,AveragePrice
,NTILE(4) OVER (
PARTITION BY ProductNumber ORDER BY ProductNumber
) AS Quartile
FROM #temp_products
) Vals
GROUP BY ProductNumber
ORDER BY ProductNumber
但是当我手动计算四分位数时,第一个四分位数应该是:45.8981(在这种特殊情况下第一行和第二行的平均值)而不是 46.0142。
第三个四分位数应该是61.41535(在这种特殊情况下是第三个和第二个四分位数的平均值)而不是 60.1707 。
所以要说清楚。这是存储过程的一部分,其中计算多个价格组并将其聚合到包含平均价格的组中。我需要根据这些按产品编号分组的平均价格计算上下四分位数。结果集应包含产品编号、下四分位数和上四分位数。有人可以帮助我或指导我正确的方向吗?