回答編集履歴

2

追記

2019/08/05 02:41

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -23,3 +23,81 @@
23
23
  対象人数から提出済み数を引くだけでよいかもしれません。
24
24
 
25
25
  対象人数は普通別途ユーザーテーブルなどで管理していると思います。
26
+
27
+
28
+
29
+ # 追記
30
+
31
+ 考え方からするとkadaiテーブルで提示されている処理は
32
+
33
+ kadaiを管理するのではなくkadai_userの中間テーブルで、別途kadaiとuserを
34
+
35
+ 管理するテーブルがあるとよりSQL的になります
36
+
37
+
38
+
39
+ 参考)
40
+
41
+ 課題=3つ、ユーザー=7人いたとして、その連携状態が
42
+
43
+ 課題とユーザーの組み合わせ
44
+
45
+ (1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,4),(2,5),(3,1),(3,5),(3,6)
46
+
47
+ について提出済みとします
48
+
49
+
50
+
51
+ ```SQL
52
+
53
+ create table kadai_user(
54
+
55
+ id int(11) primary key auto_increment,
56
+
57
+ kadai_id int(11),
58
+
59
+ user_id int(11),
60
+
61
+ teisyutsu int(11) default 0
62
+
63
+ );
64
+
65
+
66
+
67
+ insert into kadai_user(kadai_id,user_id)
68
+
69
+ values
70
+
71
+ (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),
72
+
73
+ (2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),
74
+
75
+ (3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(3,7);
76
+
77
+
78
+
79
+ update kadai_user set teisyutsu=1
80
+
81
+ where concat(kadai_id,",",user_id) in (
82
+
83
+ "1,1","1,2","1,3","1,4",
84
+
85
+ "2,1","2,2","2,4","2,5",
86
+
87
+ "3,1","3,5","3,6");
88
+
89
+ ```
90
+
91
+
92
+
93
+ - 集計
94
+
95
+ ```SQL
96
+
97
+ select kadai_id,sum(teisyutsu=1) as 提出済,sum(teisyutsu=0) as 未提出
98
+
99
+ from kadai_user
100
+
101
+ group by kadai_id
102
+
103
+ ```

1

調整

2019/08/05 02:41

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -6,6 +6,20 @@
6
6
 
7
7
 
8
8
 
9
+ もし、上記のような運用方法なら
10
+
11
+ ```SQL
12
+
13
+ SELECT kadai_num,sum(teisyutsu = 1) as 提出数,sum(hyoka IS NULL) as 未提出数
14
+
15
+ FROM kadai
16
+
17
+ GROUP BY kadai_num
18
+
19
+ ```
20
+
21
+
22
+
9
23
  対象人数から提出済み数を引くだけでよいかもしれません。
10
24
 
11
25
  対象人数は普通別途ユーザーテーブルなどで管理していると思います。