簡體   English   中英

SQL在多列中計算某些值

[英]SQL count certain values in multiple columns

我有一個帶有3個可能值(1,0,NA)的表

Customers | Answer1 | Answer2 | Answer3
-----------------------------------
John      |   1     |  0     |  NA 
Dave      |   NA    |  0     |  NA      
Jane      |   0     |  1     |  1
Tom       |   1     |  0     |  0

我試圖僅將1和0作為值。

我試圖實現的查詢結果是:

Customers | Total_Score
-----------------------
John      |    2
Dave      |    1
Jane      |    3
Tom       |    3

對數據庫使用MySQL。

我嘗試使用: SELECT Customers, COUNT(Answer1 + Answer2 + Answer3) AS Total_Score FROM exam SQL查詢僅對值求和,而不對值1和0進行計數。感謝您的所有幫助。 我一直被困住並一直在尋找,但沒有運氣。

如果您有同一位客戶的多條記錄,請執行

SELECT Customers,
       sum((Answer1 <> 'NA') + (Answer2 <> 'NA') + (Answer3 <> 'NA')) AS Total_Score 
FROM exam
group by Customers

或者如果每個客戶只有一個

SELECT Customers,
       (Answer1 <> 'NA') + (Answer2 <> 'NA') + (Answer3 <> 'NA') AS Total_Score 
FROM exam

SQLFiddle演示

有幾種查詢模式將返回指定的結果。 我的偏好是顯式檢查該列是否包含01 ,如果包含則返回1 ,否則返回0,然后將它們加在一起。

例如,使用MySQL IF()函數:

SELECT e.Customers
     , IF(e.Answer1 IN ('0','1'), 1, 0) 
     + IF(e.Answer2 IN ('0','1'), 1, 0) 
     + IF(e.Answer3 IN ('0','1'), 1, 0)
       AS Total_Score   
 FROM exam e

相當於ANSI的將使用CASE表達式代替IF()

SELECT e.Customers
     , CASE WHEN e.Answer1 IN ('0','1') THEN 1 ELSE 0 END
     + CASE WHEN e.Answer2 IN ('0','1') THEN 1 ELSE 0 END
     + CASE WHEN e.Answer3 IN ('0','1') THEN 1 ELSE 0 END
       AS Total_Score   
 FROM exam e

暫無
暫無

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

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