回答編集履歴
2
追記
    
        answer	
    CHANGED
    
    | @@ -10,4 +10,43 @@ | |
| 10 10 | 
             
            ```
         | 
| 11 11 |  | 
| 12 12 | 
             
            対象人数から提出済み数を引くだけでよいかもしれません。
         | 
| 13 | 
            -
            対象人数は普通別途ユーザーテーブルなどで管理していると思います。
         | 
| 13 | 
            +
            対象人数は普通別途ユーザーテーブルなどで管理していると思います。
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            # 追記
         | 
| 16 | 
            +
            考え方からするとkadaiテーブルで提示されている処理は
         | 
| 17 | 
            +
            kadaiを管理するのではなくkadai_userの中間テーブルで、別途kadaiとuserを
         | 
| 18 | 
            +
            管理するテーブルがあるとよりSQL的になります
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            参考)
         | 
| 21 | 
            +
            課題=3つ、ユーザー=7人いたとして、その連携状態が
         | 
| 22 | 
            +
            課題とユーザーの組み合わせ
         | 
| 23 | 
            +
            (1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,4),(2,5),(3,1),(3,5),(3,6)
         | 
| 24 | 
            +
            について提出済みとします
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ```SQL
         | 
| 27 | 
            +
            create table kadai_user(
         | 
| 28 | 
            +
            id int(11) primary key auto_increment,
         | 
| 29 | 
            +
            kadai_id int(11),
         | 
| 30 | 
            +
            user_id int(11),
         | 
| 31 | 
            +
            teisyutsu int(11) default 0
         | 
| 32 | 
            +
            );
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            insert into kadai_user(kadai_id,user_id)
         | 
| 35 | 
            +
            values
         | 
| 36 | 
            +
            (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),
         | 
| 37 | 
            +
            (2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),
         | 
| 38 | 
            +
            (3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(3,7);
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            update kadai_user set teisyutsu=1
         | 
| 41 | 
            +
            where concat(kadai_id,",",user_id) in (
         | 
| 42 | 
            +
            "1,1","1,2","1,3","1,4",
         | 
| 43 | 
            +
            "2,1","2,2","2,4","2,5",
         | 
| 44 | 
            +
            "3,1","3,5","3,6");
         | 
| 45 | 
            +
            ```
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            - 集計
         | 
| 48 | 
            +
            ```SQL
         | 
| 49 | 
            +
            select kadai_id,sum(teisyutsu=1) as 提出済,sum(teisyutsu=0) as 未提出
         | 
| 50 | 
            +
            from kadai_user 
         | 
| 51 | 
            +
            group by kadai_id
         | 
| 52 | 
            +
            ```
         | 
1
調整
    
        answer	
    CHANGED
    
    | @@ -2,5 +2,12 @@ | |
| 2 2 | 
             
            未提出は本当にteisyutsu = nullのデータを置いてあるのでしょうか?
         | 
| 3 3 | 
             
            (課題を出した時点で全員未提出状態にしてデータを投入しているかどうか?)
         | 
| 4 4 |  | 
| 5 | 
            +
            もし、上記のような運用方法なら
         | 
| 6 | 
            +
            ```SQL
         | 
| 7 | 
            +
            SELECT kadai_num,sum(teisyutsu = 1) as 提出数,sum(hyoka IS NULL) as 未提出数
         | 
| 8 | 
            +
            FROM kadai
         | 
| 9 | 
            +
            GROUP BY kadai_num
         | 
| 10 | 
            +
            ```
         | 
| 11 | 
            +
             | 
| 5 12 | 
             
            対象人数から提出済み数を引くだけでよいかもしれません。
         | 
| 6 13 | 
             
            対象人数は普通別途ユーザーテーブルなどで管理していると思います。
         | 
