SUM()所有结果(没有group by子句)

Tho*_*son 9 mysql sql group-by

我有一个奇怪的错误.我有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 
    ...
Run Code Online (Sandbox Code Playgroud)

这在我的MAMP安装上工作正常,但不在我的远程服务器上.我假设某个地方有一个配置选项阻止它工作.

这是我得到的错误:

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

我知道这个错误告诉了我什么,但问题是我不想分组.我想在这里位(除去以上为简洁起见)匹配的所有结果,然后返回SUM()中的number列(作为linedrug基于该CASE条款).

所以基本上,无论条款匹配什么,WHERE我想要返回的都是1行:

line | drug
-----------
10   | 32
Run Code Online (Sandbox Code Playgroud)

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

LSe*_*rni 8

你可以GROUP在桌子上运行BY一个常量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)
Run Code Online (Sandbox Code Playgroud)

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

可能是因为在聚合函数中使用CASE会使MySQL的生产版本大吃一惊.