質問するログイン新規登録

回答編集履歴

2

追記

2019/08/05 02:41

投稿

yambejp
yambejp

スコア118164

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

調整

2019/08/05 02:41

投稿

yambejp
yambejp

スコア118164

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
  対象人数は普通別途ユーザーテーブルなどで管理していると思います。