我有一个奇怪的错误。我的 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 安装上运行良好,但在我的远程服务器上运行不正常。我假设某处有一个配置选项阻止它工作。
这是我遇到的错误:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
我知道错误告诉我什么,但问题是我不想按任何东西分组。我想获得 where 位(为简洁起见已在上面删除)匹配的所有结果,然后返回 number
列的 SUM()
(作为 line
或 drug
基于 CASE
子句)。
所以基本上,无论 WHERE
子句匹配什么,我只想返回 1 行:
line | drug
-----------
10 | 32
有解决办法吗?或者我可以GROUP BY nothing
之类的任何方式?
最佳答案
您可以在运行SELECT
的表上GROUP
BY 常量。
例如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)
但通常此错误意味着至少有一列未分组。
您在聚合函数中使用 CASE 可能会使 MySQL 的生产版本大吃一惊。
关于mysql - SUM() 所有结果(无 group by 子句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515233/