Mysql查询使用where和group by子句

S.P*_*IBA 14 mysql

我有下表.

mysql> select * from consumer9;
+------------+--------------+-------------------+
| Service_ID | Service_Type | consumer_feedback |
+------------+--------------+-------------------+
|        100 | Computing    |                -1 |
|         35 | Printer      |                 0 |
|         73 | Computing    |                -1 |
|         50 | Data         |                 0 |
+------------+--------------+-------------------+
Run Code Online (Sandbox Code Playgroud)

我想GROUP BY在我的项目中使用子句.我在使用查询时遇到错误:

SELECT  Service_ID, Service_Type, SUM(consumer_feedback) 
FROM consumer9 
GROUP BY Service_ID 
WHERE Service_Type=Printer;
Run Code Online (Sandbox Code Playgroud)

错误

错误1064(42000):您的SQL语法有错误; 检查与您的MySQL服务器版本对应的手册,以便在第1行的'where Service_Type = Printer'附近使用正确的语法

a'r*_*a'r 30

以下查询应该有效.

select Service_ID, Service_Type, sum(consumer_feedback) 
from consumer9 
where Service_Type=Printer
group by Service_ID, Service_Type;
Run Code Online (Sandbox Code Playgroud)

请记住,where子句在group by子句之前,并且select部分中的所有非聚合术语必须出现在group by子句中.


Emi*_*ano 6

使用该having子句代替where

SELECT  Service_ID, Service_Type, SUM(consumer_feedback) 
FROM consumer9 
GROUP BY Service_ID 
HAVING Service_Type='Printer';
Run Code Online (Sandbox Code Playgroud)

问候.

  • 错误的答案,当 WHERE 取 0.0005 时,HAVING 需要 20 秒。我只是多次尝试使用与本文类似的语法。 (3认同)
  • HAVING 也可以工作,但可能更适合处理派生数量(这里是一个人为的示例)`SUM(consumer_feedback) AS total ... HAVING total > 0`,WHERE 无法访问。 (2认同)