mySQL 在新创建的列上使用 where

Joh*_*son 2 mysql sql average where-clause having-clause

所以,我认为这相当简单,但我搞砸了一些事情。

我有疑问

SELECT AVG(price), food_type
FROM instructor
GROUP BY food_type
Run Code Online (Sandbox Code Playgroud)

产生这个:

Price | food_type |
2.25 | Drink     |
1.50 | Candy     |
3    | Soup      |
Run Code Online (Sandbox Code Playgroud)

我正在尝试退回所有超过 2 美元的价格

所以我想要:

Price | food_type |
2.25 | Drink     |
3    | Soup      |
Run Code Online (Sandbox Code Playgroud)

看起来应该很简单

SELECT AVG(price), food_type
FROM instructor
WHERE AVG(price) > 2
GROUP BY food_type
Run Code Online (Sandbox Code Playgroud)

但我无法让它发挥作用。

我究竟做错了什么?

GMB*_*GMB 5

您不能在where子句中使用聚合函数。相反,您需要having

SELECT AVG(price), food_type
FROM instructor
GROUP BY food_type
HAVING AVG(price) > 2
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中,您还可以在子句中引用别名HAVING(这是标准 SQL 的扩展):

SELECT AVG(price) avg_price, food_type
FROM instructor
GROUP BY food_type
HAVING avg_price > 2
Run Code Online (Sandbox Code Playgroud)