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

回答編集履歴

3

推敲

2018/07/30 14:59

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  group by dt, 都道府県
19
19
  ```
20
20
  集計項目が増えたときは、sum()部分を追加します。
21
- ※crosstabだと変更はカラムの並びを気にしなければ、変更は不要
21
+ ※crosstabだとカラムの並びを気にしなければ、変更は不要
22
22
 
23
23
  その他の方法としては、配列に畳んで、取得した側で処理するとか
24
24
  ```SQL

2

推敲

2018/07/30 14:59

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  2018-01-02|青森|みかん|1
9
9
  2018-01-02|北海道|みかん|5
10
10
 
11
- 上記のテーブルから目的の表を取り出すとするには、クロス集計を行えばいいだけです。
11
+ 上記のテーブルから目的の表を取り出すには、クロス集計を行えばいいだけです。
12
12
  [crosstab](https://www.postgresql.jp/document/9.6/html/tablefunc.html)を使用して行うか、以下のようなSQLで取得できます。
13
13
  ```SQL
14
14
  select dt, 都道府県

1

追記

2018/07/30 14:58

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -6,4 +6,23 @@
6
6
  2018-01-02|北海道|りんご|1
7
7
  2018-01-01|北海道|みかん|1
8
8
  2018-01-02|青森|みかん|1
9
- 2018-01-02|北海道|みかん|5
9
+ 2018-01-02|北海道|みかん|5
10
+
11
+ 上記のテーブルから目的の表を取り出すとするには、クロス集計を行えばいいだけです。
12
+ [crosstab](https://www.postgresql.jp/document/9.6/html/tablefunc.html)を使用して行うか、以下のようなSQLで取得できます。
13
+ ```SQL
14
+ select dt, 都道府県
15
+ ,sum(case 区分 when 'りんご' then 値 end) as りんご
16
+ ,sum(case 区分 when 'みかん' then 値 end) as みかん
17
+ from table
18
+ group by dt, 都道府県
19
+ ```
20
+ 集計項目が増えたときは、sum()部分を追加します。
21
+ ※crosstabだと変更はカラムの並びを気にしなければ、変更は不要
22
+
23
+ その他の方法としては、配列に畳んで、取得した側で処理するとか
24
+ ```SQL
25
+ select dt, 都道府県,arry_agg(区分 order by 区分),arry_agg(値 order by 区分)
26
+ from table
27
+ group by dt, 都道府県
28
+ ```