AVG , group by, WHERE AVG greater (>) 问题
AVG , group by, WHERE AVG greater (>) issue
这是我的数据库
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
但是我的查询失败了,错误为 "Unknown column 'avg' in 'where clause'"。有人可以给我提示吗。
您不能在 WHERE
、JOIN
或 HAVING
子句中使用列别名,因此您需要重复表达式,但这不是唯一的问题。过滤聚合结果时,应使用 HAVING
子句而不是 WHERE
:
SELECT name, AVG(amount) AS avg
FROM `korisnici`
GROUP BY name
HAVING AVG(amount) > 150
原因是 WHERE
子句应用在 之前 分组和聚合(并用于确定 哪个 记录得到分组和聚合),而 HAVING
应用 在 聚合之后。
你不能那样写:这是一个常见的 SQL 错误。
avg 是标识符,您不能在 where 子句中使用标识符..
SELECT name, AVG(amount) AS avg
FROM `korisnici`
WHERE AVG(amount) > 150 GROUP BY name;
给你..
这是我的数据库
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
但是我的查询失败了,错误为 "Unknown column 'avg' in 'where clause'"。有人可以给我提示吗。
您不能在 WHERE
、JOIN
或 HAVING
子句中使用列别名,因此您需要重复表达式,但这不是唯一的问题。过滤聚合结果时,应使用 HAVING
子句而不是 WHERE
:
SELECT name, AVG(amount) AS avg
FROM `korisnici`
GROUP BY name
HAVING AVG(amount) > 150
原因是 WHERE
子句应用在 之前 分组和聚合(并用于确定 哪个 记录得到分组和聚合),而 HAVING
应用 在 聚合之后。
你不能那样写:这是一个常见的 SQL 错误。
avg 是标识符,您不能在 where 子句中使用标识符..
SELECT name, AVG(amount) AS avg
FROM `korisnici`
WHERE AVG(amount) > 150 GROUP BY name;
给你..