使用AWS Redshift中的Group By计算中位数

cla*_*vid 8 group-by window-functions amazon-redshift

我已经看过其他关于在Redshift中使用median()窗口函数的帖子,但是你如何将它与最后有一个group by的查询一起使用?

例如,假设表课程:

Course | Subject | Num_Students
-------------------------------
   1   |  Math   |      4
   2   |  Math   |      6
   3   |  Math   |      10
   4   | Science |      2
   5   | Science |      10
   6   | Science |      12
Run Code Online (Sandbox Code Playgroud)

我想得到每门课程的学生中位数.我如何编写一个给出以下结果的查询:

  Subject  | Median
-----------------------
 Math      |     6
 Science   |     10
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT
subject, median(num_students) over ()
FROM
course
GROUP BY 1
;
Run Code Online (Sandbox Code Playgroud)

但是它列出了主题的每一次出现以及相同主题的相同中位数数字(这是假数据,因此它返回的实际值不是6,但只显示所有主题的相同):

  Subject  | Median
-----------------------
 Math      |     6
 Math      |     6
 Math      |     6
 Science   |     6
 Science   |     6
 Science   |     6
Run Code Online (Sandbox Code Playgroud)

isa*_*zan 8

以下内容将为您提供所需的确切结果:

SELECT distinct
subject, median(num_students) over(partition by Subject) 
FROM
course
order by Subject;
Run Code Online (Sandbox Code Playgroud)


小智 2

您只需删除其中的“over()”部分即可。

SELECT subject, median(num_students) FROM course GROUP BY 1;
Run Code Online (Sandbox Code Playgroud)