簡體   English   中英

MySQL COUNT 查詢僅從 CASE 表達式返回一個值

[英]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.

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