AVG,分组,WHERE AVG更大(>)问题

And*_*vas 1 sql average sql-order-by

这是我的数据库

CREATE TABLE korisnici(
    name VARCHAR(30) NOT NULL,
    amount DECIMAL(65,2)
    );

INSERT INTO korisnici VALUES 
("Marina",20.10),
("Petar",300.50),
("Ivana",100.70),
("Tomislav",50.20),
("Ivana",80.60),
("Petar",10.40),
("Marina",80.50),
("Ivana",70.50),
("Marina",130.20),
("Robert",60.20),
("Blanka",130.20),
("Blanka",220.40),
("Tomislav",150.20);
Run Code Online (Sandbox Code Playgroud)

我想从列表中获取所有名称大于150的所有名称.我尝试过的东西

SELECT name, AVG(amount) AS avg FROM `korisnici` WHERE avg > 150 GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但是我的查询失败,错误"'where子句'中的未知列'avg'".有人能给我一个暗示吗?

D S*_*ley 7

您不能在使用列别名WHERE,JOINHAVING条款,所以你需要重复表达,但这不是唯一的问题.过滤聚合结果时,HAVING应使用该子句而不是WHERE:

SELECT name, AVG(amount) AS avg 
FROM `korisnici` 
GROUP BY name
HAVING AVG(amount) > 150 
Run Code Online (Sandbox Code Playgroud)

原因是该WHERE子句在分组和聚合之前应用(并用于确定哪些记录被分组和聚合),而在聚合之后HAVING应用.