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

Calculating LQ, UQ and IQR in SQL for grouped data

我正在努力研究如何获得 SQL 中分组数据的 upper/lower 四分位数和 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 的数据列中获取 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 可用于查找每个值属于哪个四分位数,但我正在努力将它们放在一起[=13​​=]

确实,您可以使用 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