![](/img/trans.png)
[英]MySQL select MAX value from subquery only returns one results from outer query. Why?
[英]MySQL COUNT query returns only one value from a CASE expression
我有一個帶有score
列的表格,根據分數金額,我想將它們分組到不同的“發行人”中並對其進行計數。
問題是當score
記錄實際上也遇到“批評者”和“推薦者”時,我只得到了“被動”。 這是我的查詢:
SELECT
CASE
WHEN score < 133 THEN 'Detractors'
WHEN score BETWEEN 133 AND 209 THEN 'Passives'
WHEN score = 210 THEN 'Promotors'
END AS 'Issuer',
COUNT(1) AS 'Amount'
FROM my_data
關於發生了什么的任何建議?
包含聚合函數(如COUNT()
或MAX()
)而沒有GROUP BY
子句的查詢將始終只返回一行。 如果一列(甚至像您的Issuer
這樣的計算列)可能包含不同的值,服務器必須選擇其中之一。
該 文件指出:
在這種情況下,服務器可以自由地從每個組中選擇任何值,因此除非它們相同,否則選擇的值是不確定的,這可能不是您想要的。
在您的情況下, Issuer
可以包含三個值(“Detractors”、“Passives”、“Promotors”),並且服務器已選擇“Passives”。
請注意,啟用ONLY_FULL_GROUP_BY
模式(這是自 5.7 版以來的默認設置),您的查詢將失敗並顯示錯誤。
ONLY_FULL_GROUP_BY
拒絕選擇列表、
HAVING
條件或ORDER BY
列表引用非聚合列的查詢,這些列既不在GROUP BY
子句中命名,也不在功能上依賴於(唯一確定的)GROUP BY
列。
您的情況的解決方案相當簡單:在查詢中包含GROUP BY Issuer
SELECT
CASE
WHEN score < 133 THEN 'Detractors'
WHEN score BETWEEN 133 AND 209 THEN 'Passives'
WHEN score = 210 THEN 'Promotors'
END AS 'Issuer',
COUNT(1) AS 'Amount'
FROM my_data
GROUP BY `Issuer`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.