[英]Calculating median with Group By in AWS 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
我想得到每門課程的學生中位數。 我如何編寫一個給出以下結果的查詢:
Subject | Median
-----------------------
Math | 6
Science | 10
我試過了:
SELECT
subject, median(num_students) over ()
FROM
course
GROUP BY 1
;
但是它列出了主題的每一次出現以及相同主題的相同中位數數字(這是假數據,因此它返回的實際值不是6,但只顯示所有主題的相同):
Subject | Median
-----------------------
Math | 6
Math | 6
Math | 6
Science | 6
Science | 6
Science | 6
以下內容將為您提供您正在尋找的結果:
SELECT distinct
subject, median(num_students) over(partition by Subject)
FROM
course
order by Subject;
您只需要刪除它的“over()”部分。
SELECT subject, median(num_students) FROM course GROUP BY 1;
您尚未在窗口中定義分區。 而不是OVER()
你需要OVER(PARTITION BY subject)
。
假設您要計算其他聚合,按主題,如avg(),您需要使用子查詢:
WITH subject_numstudents_medianstudents AS (
SELECT
subject
, num_students
, median(num_students) over (partition BY subject) AS median_students
FROM
course
)
SELECT
subject
, median_students
, avg(num_students) as avg_students
FROM subject_numstudents_medianstudents
GROUP BY 1, 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.