首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SUM()所有结果(不按子句分组)

问SUM()所有结果(不按子句分组)
EN

Stack Overflow用户
提问于 2012-09-20 14:49:43
回答 1查看 8.5K关注 0票数 10

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

代码语言:javascript
复制
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安装上很好,但在我的远程服务器上就不行了。我想在某个地方有一个配置选项阻止了它的工作。

这是我正在犯的错误:

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

我知道错误告诉我的是什么,但问题是我不希望按任何东西分组。我希望获得where位匹配的所有结果(为了简洁起见,此处删除),然后返回number列的line或基于CASE子句的drug。

因此,从本质上说,不管与WHERE子句匹配的是什么,我只想返回1行:

代码语言:javascript
复制
line | drug
-----------
10   | 32

有办法绕过这件事吗?或者我能用什么方法GROUP BY nothing什么的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-20 14:58:02

您可以通过运行GROUP的表上的一个常量来进行SELECT。

例如,GROUP BY NULL

代码语言:javascript
复制
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的生产版本可能会因为在聚合函数中使用大小写而大吃一惊。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12515233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档