Presto SQL 透视(因为缺少更好的词)数据

agu*_*muz 7 sql presto

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

我想格式化数据,使其看起来像:

student_id  2018_Q1_score 2018_Q1_completed 2017_Q3_score
1           0             N                 5
3           4             Y                 4
4           2             N                 2
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过加入每个时间段的表格来做到这一点,但我想在这里问一下是否有任何大师对更具可扩展性的解决方案提出了建议(例如,也许不必为每个时间段手动创建一个新的联接)。有什么建议?

Gor*_*off 5

您可以只使用条件聚合:

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
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法以自动化的方式实现此功能,而不需要为所有所需的列手动创建条件逻辑? (4认同)
  • @psrpsrpsr。。。您可以将 SQL 查询构造为字符串,然后运行该查询。可以使用Python等应用语言。 (2认同)