【问题标题】:Mysql query using where and group by clauseMysql查询使用where和group by子句
【发布时间】:2010-02-24 09:28:12
【问题描述】:

我有下表。

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;

错误

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“where Service_Type=Printer”附近使用的语法

【问题讨论】:

    标签: mysql


    【解决方案1】:

    以下查询应该可以工作。

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

    请记住,where 子句位于 group by 子句之前,选择部分中的所有非聚合项都必须出现在 group by 子句中。

    【讨论】:

      【解决方案2】:

      使用having 子句代替where

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

      问候。

      【讨论】:

      • 错误答案,当 WHERE 占用 0.0005 时,HAVING 需要 20 秒。我只是在这篇文章中多次尝试使用类似的语法。
      • HAVING 也可以,但可能更适合使用 WHERE 无法访问的派生数量(这里是一个人为的例子)SUM(consumer_feedback) AS total ... HAVING total > 0
      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      相关资源
      最近更新 更多