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'".有人能给我一个暗示吗?
您不能在使用列别名WHERE,JOIN或HAVING条款,所以你需要重复表达,但这不是唯一的问题.过滤聚合结果时,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应用.