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

回答編集履歴

3

procedure

2017/05/10 00:47

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -29,4 +29,44 @@
29
29
  group by t1.uid
30
30
 
31
31
  ```
32
- プロシージャとピボットとか使うともうちょい自動化してそれっぽく見えるかも
32
+ プロシージャとピボットとか使うともうちょい自動化してそれっぽく見えるかも
33
+
34
+ # procudure
35
+ - 以下、実行しプロシージャをつくっておきます。
36
+ ```SQL
37
+ drop procedure if exists my_proc;
38
+ delimiter //
39
+ create procedure my_proc()
40
+ begin
41
+ declare a int;
42
+ declare b varchar(100);
43
+ declare done int default 0;
44
+ declare cur cursor for
45
+ select eid,ename from event order by eid;
46
+ declare continue handler for sqlstate '02000' set done=1;
47
+
48
+ set @sql='select t1.uid,t1.uname\n';
49
+ open cur;
50
+ repeat
51
+ fetch cur into a,b;
52
+ if not done then
53
+ set @sql=concat (@sql,',sum(t2.eid=',a,' * t2.shukketu=1) as `',b,' shukketu`\n');
54
+ set @sql=concat (@sql,',sum(t2.eid=',a,' * t2.nyukin=1) as `',b,' nyukin`\n');
55
+ end if;
56
+ until done end repeat;
57
+ close cur;
58
+ set @sql=concat (@sql,' from user as t1\n');
59
+ set @sql=concat (@sql,' left join event_user as t2 on t1.uid=t2.uid\n');
60
+ set @sql=concat (@sql,' group by t1.uid\n');
61
+ prepare stmt from @sql;
62
+ execute stmt;
63
+ end
64
+ //
65
+ delimiter ;
66
+
67
+ ```
68
+ - 実行
69
+ ```SQL
70
+ call my_proc;
71
+
72
+ ```

2

調整

2017/05/10 00:47

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -29,5 +29,4 @@
29
29
  group by t1.uid
30
30
 
31
31
  ```
32
-
33
- ピボットとか使うともうちょいそれっぽく見えるかも
32
+ プロシージャとピボットとか使うともうちょい自動化してそれっぽく見えるかも

1

追記

2017/05/09 14:43

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -3,4 +3,31 @@
3
3
  あればよいような気がします。
4
4
 
5
5
  create tableとinsert into形式で例示いただければ
6
- SQL文は知恵を絞れると思います。
6
+ SQL文は知恵を絞れると思います。
7
+
8
+ # sample
9
+ - 元データ
10
+ ```SQL
11
+ create table event (eid int unique,ename varchar(30));
12
+ insert into event values(1,'child event 1'),(2,'child event 2'),(3,'child event 3');
13
+ create table user (uid int unique,uname varchar(30));
14
+ insert into user values(1,'tanaka'),(2,'yoshida'),(3,'suzuki'),(4,'sato'),(5,'honda');
15
+ create table event_user(eid int,uid int ,shukketu tinyint not null,nyukin tinyint not null,unique(eid,uid));
16
+ insert into event_user values(1,1,1,1),(1,2,0,0),(1,3,1,0),(2,1,0,1),(3,4,1,0);
17
+ ```
18
+ - 検索
19
+ ```SQL
20
+ select t1.uid,t1.uname
21
+ ,sum(t2.eid=1 * t2.shukketu=1) as e1s
22
+ ,sum(t2.eid=1 * t2.nyukin=1) as e1n
23
+ ,sum(t2.eid=2 * t2.shukketu=1) as e2s
24
+ ,sum(t2.eid=2 * t2.nyukin=1) as e2n
25
+ ,sum(t2.eid=3 * t2.shukketu=1) as e3s
26
+ ,sum(t2.eid=3 * t2.nyukin=1) as e3n
27
+ from user as t1
28
+ left join event_user as t2 on t1.uid=t2.uid
29
+ group by t1.uid
30
+
31
+ ```
32
+
33
+ ピボットとか使うともうちょいそれっぽく見えるかも