我有一个Postgres带有通常group by子句的()查询:
Postgres
group by
select extract(year from a.created) as Year,a.testscoreid, b.irt_tlevel, count(a.*) as Questions from asmt.testscores a join asmt.questions b on a.questionid = b.questionid where a.answered = True group by Year,a.testscoreid, b.irt_tlevel order by Year desc, a.testscoreid
该列b.irt_tlevel具有low,medium和值,high所有这些结果均为行格式,例如:
b.irt_tlevel
low
medium
high
Year TestScoreId Irt_tlevel Questions 2015 1 Low 2 2015 1 Medium 3 2015 1 High 5
我希望我的结果采用以下格式:
Year TestScoreId Low Medium High TotalQuestions 2015 1 2 3 5 10
任何帮助,将不胜感激。
如果已知irt_tlevel列中不同值的数量是固定的,则可以使用条件聚合。
select extract(year from a.created) as Year, a.testscoreid, sum(case when b.irt_tlevel = 'Low' then 1 else 0 end) as Low, sum(case when b.irt_tlevel = 'Medium' then 1 else 0 end) as Medium, sum(case when b.irt_tlevel = 'High' then 1 else 0 end) as High, count(*) as Questions from asmt.testscores a join asmt.questions b on a.questionid = b.questionid where a.answered = True group by Year, a.testscoreid order by Year desc, a.testscoreid