Ser*_*tin 1 sql sql-server average median sql-server-2012
我的表中有以下数据:
SELECT category, value FROM test
Run Code Online (Sandbox Code Playgroud)
| category | value | +----------+-------+ | 1 | 1 | | 1 | 3 | | 1 | 4 | | 1 | 8 |
现在我正在使用两个单独的查询.
要获得平均值:
SELECT category, avg(value) as Average
FROM test
GROUP BY category
Run Code Online (Sandbox Code Playgroud)
| category | value | +----------+-------+ | 1 | 4 |
获得中位数:
SELECT DISTINCT category,
PERCENTILE_CONT(0.5)
WITHIN GROUP (ORDER BY value)
OVER (partition BY category) AS Median
FROM test
Run Code Online (Sandbox Code Playgroud)
| category | value | +----------+-------+ | 1 | 3.5 |
有没有办法在一个查询中合并它们?
注意:我知道我也可以使用两个子查询获得中位数,但我更喜欢使用PERCENTILE_CONT函数来获取它.
AVG也是一个窗口功能:
select
distinct
category,
avg(value) over (partition by category) as average,
PERCENTILE_CONT(0.5)
WITHIN GROUP (ORDER BY value)
OVER (partition BY category) AS Median
from test
Run Code Online (Sandbox Code Playgroud)