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列(作为line或drug基于该CASE条款).
所以基本上,无论条款匹配什么,WHERE我想要返回的都是1行:
line | drug
-----------
10 | 32
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?或者我可以GROUP BY nothing或任何方式?
你可以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的生产版本大吃一惊.