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

时间:2015-09-14 22:07:41

标签: sql sql-order-by average

这是我的数据库

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子句'"。有人可以给我一个暗示。

2 个答案:

答案 0 :(得分:5)

您无法在WHEREJOINHAVING子句中使用列别名,因此您需要重复此表达式,但这不是唯一的问题。过滤聚合结果时,应使用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;

你去.. ..