在 SQL 中为分组数据计算 LQ、UQ 和 IQR

Posted

技术标签:

【中文标题】在 SQL 中为分组数据计算 LQ、UQ 和 IQR【英文标题】:Calculating LQ, UQ and IQR in SQL for grouped data 【发布时间】:2021-10-26 15:38:48 【问题描述】:

我正在努力弄清楚如何获得 SQL 中分组数据的上/下四分位数和 IQR。假设我有一些类似于以下的数据:

 ID  Data
 1    21
 1    37
 1    86
 1     1
 1    34
 1    77
 2     5
 2    15
 2    29
 3    12
 3    76
 3    54
 3    10

我希望能够从每个 ID 的 Data 列中获取 LQ、UQ 和 IQR,如下所示:

   ID     LQ    UQ    IQR
    1  24.25  67.0  42.75
    2  10.00  22.0  12.00
    3  11.50  59.5  48.00

到目前为止,我发现的所有内容都没有查看分组位。我知道 PERCENTILE_COUNT 可用于查找每个值属于哪个四分位数,但我正在努力将它们放在一起

【问题讨论】:

【参考方案1】:

确实,您可以使用PERCENTILE_CONT 获取此信息。然后你做一个简单的分组

SELECT
  ID,
  LQ,
  UQ,
  IQR = UQ - LQ
FROM (
    SELECT
      ID,
      LQ = PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY Data) OVER (PARTITION BY ID),
      UQ = PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY Data) OVER (PARTITION BY ID)
    FROM YourTable t
) t
GROUP BY ID, LQ, UQ;

db<>fiddle

【讨论】:

以上是关于在 SQL 中为分组数据计算 LQ、UQ 和 IQR的主要内容,如果未能解决你的问题,请参考以下文章

永磁同步伺服系统电流环整定问题,Iq不能跟随,电机输出Iq为负值,神马情况,请教高手

从 SQL Server 表中为直方图创建范围箱

数据的分组与计算

SQL计算分组变量占总数的份额

SQL - 如何在单独的行计算之后对数据进行分组

ASE存储过程和IQ存储过程的常见区别(附例子)