簡體   English   中英

SUM()所有結果(沒有group by子句)

[英]SUM() all results (no group by clause)

我有一個奇怪的錯誤。 我有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安裝上工作正常,但不在我的遠程服務器上。 我假設某個地方有一個配置選項阻止它工作。

這是我得到的錯誤:

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

我知道這個錯誤告訴了我什么,但問題是我不想分組。 我希望得到所有結果where位(上面為了簡潔而刪除)匹配,然后返回number列的SUM() (作為基於CASE子句的linedrug )。

基本上,無論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的生產版本大吃一驚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM