SQLでテーブルを縦持ちから横持ちに変更する
Note
SQLで縦に並んでるデータを横に並べる。
縦持ちのテーブル
| owner_id | key | value |
|---|---|---|
| 1 | height | 160 |
| 1 | weight | 60 |
| 2 | height | 170 |
| 2 | weight | 70 |
横持ちのテーブル
| owner_id | height | weight |
|---|---|---|
| 1 | 160 | 60 |
| 2 | 170 | 70 |
以下のようにcase文を使うことで横持ちにする
select owner_id
max(case key when height then value end) as height
max(case key when weight then value end) as weight
from table
group by owner_id
max()で囲むことでgroup by時のaggregateを擬似的に対応できる。
group byを行わない場合以下のようなテーブルが生成される。
| owner_id | height | weight |
|---|---|---|
| 1 | 160 | null |
| 1 | null | 60 |
| 2 | 170 | null |
| 2 | null | 70 |
このテーブルをgroup byすることで横持ちのテーブルのような形に整形が可能になる。