1. ホーム
  2. sql

[解決済み] Presto SQL ピボッティング(言葉は悪いですが)データ

2022-01-31 12:28:39

質問

Prestoデータベースで、いくつかのコースデータを扱っています。テーブルのデータは以下のようなものです。

student_id  period   score completed
1           2016_Q1  3     Y
1           2016_Q3  4     Y
3           2017_Q1  4     Y
4           2018_Q1  2     N

というようにデータを整形したいのですが。

student_id  2018_Q1_score 2018_Q1_completed 2017_Q3_score
1           0             N                 5
3           4             Y                 4
4           2             N                 2

しかし、よりスケーラブルなソリューション(例えば、期間ごとに新しいジョインを手動で作成する必要がないなど)を推奨する達人がいるかどうか、ここで聞いてみたかったのです。何か提案はありますか?

どのように解決するのですか?

条件付き集計を使えばいいんだよ。

select student_id,
       max(case when period = '2018_Q1' then score else 0 end) as score_2018q1,
       max(case when period = '2018_Q1' then completed then 'N' end) as completed_2018q1,
       max(case when period = '2017_Q3' then score else 0 end) as score_2017q3
from t
group by student_id