这是我的数据库
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);
我想从列表中获取所有名称大于150的所有名称的所有名称。像我尝试的那样
SELECT name, AVG(amount) AS avg FROM `korisnici` WHERE avg > 150 GROUP BY name
但是我的查询失败了,错误"未知列' avg'在' where子句'"。有人可以给我一个暗示。
答案 0 :(得分:5)
您无法在WHERE
,JOIN
或HAVING
子句中使用列别名,因此您需要重复此表达式,但这不是唯一的问题。过滤聚合结果时,应使用HAVING
子句代替WHERE
:
SELECT name, AVG(amount) AS avg
FROM `korisnici`
GROUP BY name
HAVING AVG(amount) > 150
原因是{<1}}子句在分组和聚合之前应用(并用于确定哪些记录被分组和聚合),而在聚合之后应用。
答案 1 :(得分:-1)
你不能这样写:这是一个常见的SQL错误。
avg是标识符,您不能在where子句中使用标识符。
SELECT name, AVG(amount) AS avg
FROM `korisnici`
WHERE AVG(amount) > 150 GROUP BY name;
你去.. ..