2016-04-01 7 views
1

私は、MySQLのテーブルから特定の学生の毎月の出席報告を表示する必要があります。私は私の出欠表発言「1」手段からデータを取得したい出席者テーブルから毎月の出席者レポートをmysqlクエリーを通して取得する方法は?

enter image description here

:私は、私は下の画像に示されている私のデータベースで出欠表を持って

、以下のようになる必要があります以下のような「が存在」:私は

以下のようなデータをフェッチするためにMySQLのクエリを必要とする 誰もがクエリ

を書くために私を助けてください

私のクエリは

SELECT YEAR(att_date) AS y, MONTH(att_date) AS m, COUNT(DISTINCT att_date) FROM attendance WHERE class_id=11 AND student_id=15 GROUP BY y, m 

である。しかしについて

以下のように予想される結果を得ていなかった学生-ID- 15

CLASS STUDENT_ID YEAR MONTH TOTAL_CLASSES TOTAL_PRESENT 

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

答えて

0

SQLFiddle:http://sqlfiddle.com/#!9/7e76fb/11

SELECT 
    YEAR(att_date) AS `YEAR`, 
    MONTHNAME(att_date) AS `MONTH`, 
    COUNT(DISTINCT att_date) as TOTAL_CLASSES, 
    COUNT(DISTINCT IF(remarks != '0' 
         AND [email protected]_id 
         AND student_id=14, 
         att_date, NULL)) as TOTAL_PRESENT 
FROM attendance CROSS JOIN (SELECT @class_id := 
          (SELECT class_id FROM attendance WHERE student_id = 14 LIMIT 1)) param 
GROUP BY `YEAR`, MONTH(att_date); 
+0

http://sqlfiddle.com/#!9/d5c64/1 TOTAL_CLASSESが –

+0

ありません元の問題があるschool_id、BRANCH_ID、session_idのあたりとしてカウントしてCLASS_IDする必要として、適切な結果を得ていません固定されたカテゴリを解決するには、つまり、固定されたschool_idのために、条件をschool_id、branch_id、およびsession_idとして渡します。元の問題では、私はちょうど特定のschool_idを除外するために、このフィドルを見てくださいhttp://sqlfiddle.com/#!9/d5c64/1 –

+0

もちろん、私はあなたに最高の投票を与えました。新しい答えを得ることができます –

0

http://sqlfiddle.com/#!9/ae54c95/1

SELECT 
YEAR(att_date) AS y, 
MONTH(att_date) AS m, 
COUNT(distinct att_date) as TOTAL_CLASSES, 
count(distinct IF(remarks = '1' or remarks ='2' or remarks ='3', att_date, NULL)) as TOTAL_PRESENT FROM attendance WHERE class_id=11 AND student_id=15 GROUP BY y, m 
+0

私は同じ日にクラスを数えようとはしませんが、月ごとにクラスを数え、それぞれの月の合計クラスとして表示したいと考えています \t 私は合計クラスが必要ですstudent_id = 15、classs_id-11と備考= '1'グループの合計att_dateにかかわらず、月と年の合計のatt_dateグループ –

+0

Gotcha、実際にあなたのエラーを実際に見ることはできません。私が考えることができるのは、あなたのatt日付にあなたの別のものを乱しているタイムスタンプがあるということです。それはあなたのテーブルイメージにもありません。どの列が間違ったデータを表示していますか? – user3248331

+0

結果のhttp://sqlfiddle.com/#!9/45ac1/1は、あなたが望むものと一致するようです。 – user3248331

関連する問題