使用where和group by子句的Mysql查询

26

我有以下表格。

mysql> select * from consumer9;
+------------+--------------+-------------------+
| Service_ID | Service_Type | consumer_feedback |
+------------+--------------+-------------------+
|        100 | Computing    |                -1 |
|         35 | Printer      |                 0 |
|         73 | Computing    |                -1 |
|         50 | Data         |                 0 |
+------------+--------------+-------------------+

我想在我的项目中使用GROUP BY语句。但当我使用以下查询时,会出现错误:

SELECT  Service_ID, Service_Type, SUM(consumer_feedback) 
FROM consumer9 
GROUP BY Service_ID 
WHERE Service_Type=Printer;

错误

错误 1064 (42000): 在您的SQL语法中存在错误;请查看与您的MySQL服务器版本相对应的手册,以了解正确使用语法的方式'where Service_Type=Printer'在第1行附近

2个回答

45

下面的查询应该可以工作。

select Service_ID, Service_Type, sum(consumer_feedback) 
from consumer9 
where Service_Type=Printer
group by Service_ID, Service_Type;

请记住,where子句要先于group by子句,并且select部分中所有未聚合的项都必须出现在group by子句中。


11

使用 having 子句代替 where

SELECT  Service_ID, Service_Type, SUM(consumer_feedback) 
FROM consumer9 
GROUP BY Service_ID 
HAVING Service_Type='Printer';

致敬。


2
错误的答案,使用 HAVING 花费了20秒,而 WHERE 只需0.0005秒。我只是尝试多次使用类似于这篇文章的语法。 - Anyone_ph
3
HAVING也可以使用,但更适合处理派生数量(这里是一个人为的例子)SUM(consumer_feedback) AS total ... HAVING total > 0,而WHERE无法访问。 - ssteele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接