2016-04-01 5 views
0

私は、フォームのポストを通じて= 14 STUDENT_IDてしまったと私はここでTOTAL_CLASSES生徒による月間出席レポートを取得するには?

CLASS STUDENT_ID YEAR MONTH TOTAL_CLASSES TOTAL_PRESENT 

11  14  2016  April   21    20 
11  14  2016  May   25    25 
11  14  2016  June   30    29 
11  14  2016  July   18    18 
11  14  2017  January  28    28 

以下のようSTUDENT_IDのための出席レポートを取得する必要があるが総数の日学校が開いて表し、TOTAL_PRESENTは、学生が出て存在していると言うの合計数を表しのうちTOTAL_CLASSESです。

HTMLフォームから私はstudent_id = 14のみを取得し、上記のようにレコードを取得して表示する必要があります。

私のテーブルには私の答えhttp://sqlfiddle.com/#!9/63b6a/3

をサポートするために、ここにsqlfiddleご覧ください存在と不在のための0のための1,2,3を表し発言します。

+0

あなたは12個のintを持つテーブルを必要とします。すべての月を取得するにはLEFT JOINを入力してください – Mihai

+0

sqlfiddleだけテーブルが出席可能で、何日学校が開いているかを知るために必要です。生徒のclass_idを計算し、その月の特定のクラスの合計att_dateをTOTAL_CLASSESに集計します –

答えて

1

yearmonthclassstudentの出席者数をカウントしています。このクエリでの重要なステップは、あなたが探しているの出席の列を計算するために、COUNTとSUM集計関数を使用して、あなたはグループ化している列を示すためにGROUP BYを使用することです:

SELECT 
    class_id, 
    student_id, 
    YEAR(att_date) as year, 
    MONTH(att_date) as month, 
    COUNT(remarks) AS total_classes, 
    SUM(remarks > 0) AS total_present 
FROM attendance 
WHERE student_id = 15 
GROUP BY YEAR(att_date), MONTH(att_date), class_id, student_id; 

http://sqlfiddle.com/#!9/63b6a/11

WHERE句を削除して、すべての生徒の出席を表示することができます。

関連する問題