2012-05-11 9 views
0

このSQL文を理解するのにはいくつかの困難があります。SQL Count()が望ましい結果を出していません

以下は、表のスキーマです。

ここではその学生のための0 /総エントリ数は

studentID |subjectID | attendanceStatus | classDate | 
1234567  ...   1    ..... 
1234567  ...   0 

は基本的に私はstudentIDに基づいて出席率をカウントし、この

studentID | subjectID | attendancePercentage 

attendancePercentageのように列でそれらを表示したいです私がやったことであり、望みの結果を出していませんでした。

SELECT studentID, COUNT(attendanceStatus = 0) AS Absent, 
COUNT(attendanceStatus = 1) As Present 
FROM attendance WHERE studentID = '1234567'; 

これは失敗しました。

私が達成しようとしていることを理解してくれることを願っています。

+0

MySQL以外のDBMSでは、select-listの非aggragateカラムをすべて列挙するGROUP BY句が必要です。それでもMySQLでは正しいでしょう。それはおそらく100%必要ではありません。 –

+0

「失敗しました」という文はあまり役に立ちません。あなたが得た結果とそれがなぜ間違っていたのかを述べる方が良いでしょう。または、場合によっては、エラーメッセージが表示されています(問題は、まれな結果ではなくエラーが表示された可能性があります)。 –

+0

ありがとうございます。私は次回より具体的にしようとします。 – Jian

答えて

1

代わりにsumを使う必要があると思います。

SELECT studentID , 
     SUM(CASE WHEN attendanceStatus = 0 THEN 1 
       ELSE 0 
      END) AS Absent , 
     SUM(CASE WHEN attendanceStatus = 1 THEN 1 
        ELSE 0 
       END) AS Present 
FROM attendance 
WHERE studentID = '1234567' 
+0

これらのSUM式をそれぞれ1行にまとめます。私はMySQLで単純に 'SUM(attendanceStatus = 0)'と 'SUM(attendanceStatus = 1)'を使うことができ、CASE式なしで正しい結果を得られると思います。 –

関連する問題