mysql 将AVG与HAVING一起使用

axr492tv  于 2023-01-25  发布在  Mysql
关注(0)|答案(1)|浏览(181)

我看了一个similar question并阅读了关于平均函数的文档,但当我尝试:

CREATE TABLE tab(
id      INT,
score   INT
);

INSERT INTO tab VALUES
(1, 22),
(2, 45),
(3, 82),
(4, 87);

SELECT score,AVG(score)
FROM tab 
GROUP BY score 
HAVING score>AVG(score)

AVG放在score之后,我得到
没有要显示的结果。
我怎样才能让它工作?
这是fiddle

lskq00tm

lskq00tm1#

这里的问题是你是按“score"进行聚合的,这样做会得到每条记录的平均值,因此总是AVG(score) = score
为此,您需要使用相应的窗口函数(Demo):

WITH cte AS (
    SELECT score, AVG(score) OVER() AS average_score
    FROM tab 
)
SELECT * 
FROM cte
WHERE score > average_score

或者,如果您不介意在最终输出(Demo)中不选择平均值:

SELECT score
FROM tab
WHERE score > (SELECT AVG(score) FROM tab)

相关问题