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

回答編集履歴

1

追記

2015/07/23 10:49

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -43,4 +43,52 @@
43
43
  t5.GameName, t6.GameName
44
44
  ```
45
45
 
46
- MySQL でやっています。日付の条件 `month(利用日) = 6` は、もう少しマシな方法に読み替えてもらえればと思います。
46
+ MySQL でやっています。日付の条件 `month(利用日) = 6` は、もう少しマシな方法に読み替えてもらえればと思います。
47
+
48
+ ---
49
+
50
+ 無理やり縦横の表形式にするならこんなかんじでしょうか。
51
+
52
+ ```sql
53
+ select
54
+ GameName as "5月/6月",
55
+ sum(case when GameName6 = 'Game1' then num else 0 end) as Game1,
56
+ sum(case when GameName6 = 'Game2' then num else 0 end) as Game2,
57
+ sum(case when GameName6 = 'Game3' then num else 0 end) as Game3
58
+ from
59
+ (
60
+ select GameName from t group by GameName
61
+ ) a
62
+ left join
63
+ (
64
+ select
65
+ t5.GameName as GameName5, t6.GameName as GameName6, count(*) as num
66
+ from
67
+ (
68
+ select UserID, GameName from t where month(利用日) = 5 group by UserID, GameName
69
+ ) t5
70
+ inner join
71
+ (
72
+ select UserID, GameName from t where month(利用日) = 6 group by UserID, GameName
73
+ ) t6
74
+ on
75
+ t5.UserID = t6.UserID
76
+ group by
77
+ t5.GameName, t6.GameName
78
+ ) x
79
+ on
80
+ a.GameName = x.GameName5
81
+ group by
82
+ GameName5
83
+ order by GameName
84
+ ```
85
+
86
+ ```
87
+ +-----------+-------+-------+-------+
88
+ | 5月/6月 | Game1 | Game2 | Game3 |
89
+ +-----------+-------+-------+-------+
90
+ | Game1 | 1 | 1 | 1 |
91
+ | Game2 | 1 | 1 | 1 |
92
+ | Game3 | 0 | 0 | 0 |
93
+ +-----------+-------+-------+-------+
94
+ ```