10

我有一个奇怪的错误。我有如下所示的 SQL 代码:

SELECT 
    adverse_reaction_type_id,
    SUM(CASE adverse_reaction_type_id WHEN 1 THEN `number` ELSE 0 END ) line, 
    SUM(CASE adverse_reaction_type_id WHEN 2 THEN `number` ELSE 0 END ) drug 
FROM
    core_reports_adverse_reactions, 
    ...
WHERE 
    ...

这适用于我的 MAMP 安装,但不适用于我的远程服务器。我假设某处有一个配置选项阻止它工作。

这是我得到的错误:

如果没有 GROUP BY 子句,则混合没有 GROUP 列的 GROUP 列 (MIN(),MAX(),COUNT(),...) 是非法的

我知道错误告诉我什么,但问题是我不想按任何东西分组。我想获得 where 位(为简洁起见在上面删除)匹配的所有结果,然后返回列SUM()number(作为linedrug基于CASE子句)。

所以本质上,无论子句匹配什么,WHERE我想要返回的都是1行:

line | drug
-----------
10   | 32

有没有办法解决这个问题?或者我可以的任何方式GROUP BY nothing或什么?

4

1 回答 1

9

您可以GROUP在运行SELECT.

例如GROUP BY NULL

mysql> select SUM(CASE WHEN product_id = 0 THEN -1 ELSE product_id END) AS sumprod, SUM(quantity) AS sumquant FROM orders GROUP BY NULL;
+---------+----------+
| sumprod | sumquant |
+---------+----------+
|       4 |        8 |
+---------+----------+
1 row in set (0.00 sec)

mysql> select version();
+-------------+
| version()   |
+-------------+
| 5.5.25a-log |
+-------------+
1 row in set (0.00 sec)

但通常这个错误意味着至少有一列未分组。

可能是 MySQL 的生产版本被您在聚合函数中使用 CASE 吓了一跳。

于 2012-09-20T14:58:02.783 回答