我試圖計算有多少人的成績高于平均水平。
我目前擁有的是回傳學生人數,當我洗掉“=”從“>=”時,它回傳0。
SELECT count(*)
FROM data.students
WHERE grade IN (SELECT grade
FROM data.students
GROUP BY grade HAVING grade >= AVG(grade));
如果我放一個整數而不是avg()函式,我會得到很好的結果。我究竟做錯了什么?
uj5u.com熱心網友回復:
嘗試這個 :
SELECT count(*)
FROM (
SELECT grade >= AVG(grade) OVER () AS tst
FROM data.students
) AS a
WHERE a.tst= True
uj5u.com熱心網友回復:
在子查詢中計算平均值可能是最快的:
SELECT count(*)
FROM data.students
WHERE grade > (SELECT avg(grade) FROM data.students);
>而不是>=,因為你說的是“比平均水平高”。
我究竟做錯了什么?
在您的子查詢中,GROUP BY grade每個不同的 值聚合到一行grade。avg(grade)必然與grade每一行完全相同(除了grade IS NULL)。解釋你所看到的。
但是查詢方式一開始就不必要地復雜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341492.html
標籤:sql PostgreSQL 聚合
上一篇:獲取客戶年初至今的支出
