Sql Server 2012中一个查询的平均值和中位数

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   |

现在我正在使用两个单独的查询.

  1. 要获得平均值:

      SELECT category, avg(value) as Average
        FROM test
    GROUP BY category
    
    Run Code Online (Sandbox Code Playgroud)

     
     | category | value |
     +----------+-------+
     |    1     |   4   | 
     

  2. 获得中位数:

    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函数来获取它.

Kyl*_*ale 8

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)