我看了看similar question,并阅读了average function的文档,但当我try 时:

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)

那就是AVGscore,我得到了

没有要显示的结果.

我怎么才能让它起作用呢?

这是fiddle美元.

推荐答案

这里的问题是,您是按"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 平均值:

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

Mysql相关问答推荐

为什么IN子句中有GROUP BY会导致查询变得不可执行?

mysql使用LIKE查找二进制字段有问题

MariaDB字段+1

我如何才能从MySQL过程中获取LARAVEL端的数据?

S在我的SQL代码中的外键出了什么问题?

仅获取我不是最后一个 comments 者的博客帖子

mysql 获取每个单词的第一个字母

MySQL 运行自动脚本

根据时间戳分组删除

从 SQL 中的左连接和内连接中减go 计数

在 MySQL 中转换 JSON 数组值

进行 MySQL COUNT 查询

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

Over() 函数不覆盖表中的所有行

MySQL计算特定值的列

ASP.NET EntityFramework 获取数据库名称

MySQL ORDER BY rand(),名称为 ASC

MySQL where NOT IN 名称数组?

如何让mysql自动启动? (仅限 linux-cli)

mysql 数据类型仅存储月份和年份