mysql - SUM() 所有结果(无 group by 子句)

标签 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 
    ...

这在我的 MAMP 安装上运行良好,但在我的远程服务器上运行不正常。我假设某处有一个配置选项阻止它工作。

这是我遇到的错误:

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

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

相关文章:

c# - 通过 SQL Datagridview 的文本框过滤器 - 显示太多列(重复列)

mysql - SQL 查询中的多个自然连接?

sql - R 中的动态 SQL 查询(WHERE)

SQL View : Finding maximum volume based per day

json - Ansible 按 json 属性分组

mysql - 从终端执行 MySQL 查询而不打印结果

mysql - 在 WHERE 子句中使用 MySQL 变量

database - 如何在 laravel 中使用 Group by 查询?

sql - 默认值有两组括号而不是一组

mysql - LEFT JOINed 表的 SQL 限制