2016-12-15 62 views
2

我需要得到總數沒有。在一年在場與不在場的學生從一臺考勤機: 這裏是我的查詢:如何獲得一年的在場和缺席的學生

SELECT if(status = 'P',count(level_id), 0) AS present, 
     if(status='A',count(student_id), 0) AS Absent 
     FROM attendance WHERE level_id = 'L1' AND date LIKE '2016%' 

但這返回總沒有。的學生出席或缺席。

+0

請格式化你的SQL查詢更好地理解 – 2016-12-15 10:34:07

回答

2

問題提供每種狀態的計數是你誤會了在查詢什麼COUNT(...)一樣。如果你真的想要基於缺席或存在計數,那麼你可以在裏面使用SUM(...)

SELECT 
    SUM(if(status = 'P', 1, 0)) AS Present 
    SUM(if(status = 'A', 1, 0)) AS Absent 
FROM 
    attendance 
WHERE 
    level_id = 'L1' AND date LIKE '2016%' 
+0

我與答案達成一致。但要確保學生在表格中只出現一次。否則你不會計算出現在學生的人數,而是每個在場學生的總和。這可能是你的需求錯誤(我不知道)。 如果你需要統計學生,那麼可能需要一個小組。 – Jacopo

+0

它有幫助。多謝兄弟。 –

0

嘗試GROUP BY子句像:

SELECT 
status, 
count(student_id) as attendance 
FROM attendance 
WHERE level_id = 'L1' 
    AND date LIKE '2016%' 
GROUP BY status; 

它會給你的表

1

回報,如果你需要數個元素1:

SELECT SUM(if(status = 'P',1, 0)) AS present, SUM(if(status='A',1, 0)) AS Absent 
FROM attendance WHERE level_id = 'L1' AND date LIKE '2016%' 
+0

感謝它的兄弟。 –

相關問題