回答編集履歴

3

推敲

2018/07/30 14:59

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  集計項目が増えたときは、sum()部分を追加します。
40
40
 
41
- ※crosstabだと変更はカラムの並びを気にしなければ、変更は不要
41
+ ※crosstabだとカラムの並びを気にしなければ、変更は不要
42
42
 
43
43
 
44
44
 

2

推敲

2018/07/30 14:59

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 上記のテーブルから目的の表を取り出すとするには、クロス集計を行えばいいだけです。
21
+ 上記のテーブルから目的の表を取り出すには、クロス集計を行えばいいだけです。
22
22
 
23
23
  [crosstab](https://www.postgresql.jp/document/9.6/html/tablefunc.html)を使用して行うか、以下のようなSQLで取得できます。
24
24
 

1

追記

2018/07/30 14:58

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -15,3 +15,41 @@
15
15
  2018-01-02|青森|みかん|1
16
16
 
17
17
  2018-01-02|北海道|みかん|5
18
+
19
+
20
+
21
+ 上記のテーブルから目的の表を取り出すとするには、クロス集計を行えばいいだけです。
22
+
23
+ [crosstab](https://www.postgresql.jp/document/9.6/html/tablefunc.html)を使用して行うか、以下のようなSQLで取得できます。
24
+
25
+ ```SQL
26
+
27
+ select dt, 都道府県
28
+
29
+ ,sum(case 区分 when 'りんご' then 値 end) as りんご
30
+
31
+ ,sum(case 区分 when 'みかん' then 値 end) as みかん
32
+
33
+ from table
34
+
35
+ group by dt, 都道府県
36
+
37
+ ```
38
+
39
+ 集計項目が増えたときは、sum()部分を追加します。
40
+
41
+ ※crosstabだと変更はカラムの並びを気にしなければ、変更は不要
42
+
43
+
44
+
45
+ その他の方法としては、配列に畳んで、取得した側で処理するとか
46
+
47
+ ```SQL
48
+
49
+ select dt, 都道府県,arry_agg(区分 order by 区分),arry_agg(値 order by 区分)
50
+
51
+ from table
52
+
53
+ group by dt, 都道府県
54
+
55
+ ```