首页 > 解决方案 > mySQL 在新创建的列上使用 where

问题描述

所以,我认为这很简单,但我搞砸了。

我有查询

SELECT AVG(price), food_type
FROM instructor
GROUP BY food_type

产生这个:

Price | food_type |
2.25 | Drink     |
1.50 | Candy     |
3    | Soup      |

我试图退回所有超过 2 美元的价格

所以我想要:

Price | food_type |
2.25 | Drink     |
3    | Soup      |

看起来应该很简单

SELECT AVG(price), food_type
FROM instructor
WHERE AVG(price) > 2
GROUP BY food_type

但我无法让它工作。

我究竟做错了什么?

标签: mysqlsqlaveragewhere-clausehaving-clause

解决方案


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

SELECT AVG(price), food_type
FROM instructor
GROUP BY food_type
HAVING AVG(price) > 2

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

SELECT AVG(price) avg_price, food_type
FROM instructor
GROUP BY food_type
HAVING avg_price > 2

推荐阅读