我有一些包含行的表
questionId userId answers
1 1 1
2 1 0
3 1 1
4 1 1
1 2 1
2 2 1
3 2 0
4 2 0
我想要这个结果。
questionId user1 user2
1 1 1
2 0 1
3 1 0
4 1 0
我不知道怎么能得到这个。当然,我可以查询每个用户的答案并将其与javascript合并,但我很好奇我是否可以通过一个查询获得该结果。我是否必须使用group by或subquery?
答案 0 :(得分:2)
您可以通过逐个汇总表格并转动用户来实现此目的:
SELECT
questionId,
MAX(CASE WHEN userId = 1 THEN answers END) AS user1,
MAX(CASE WHEN userId = 2 THEN answers END) AS user2
FROM
yourTable
GROUP BY
questionId
概念查询的工作方式是采用问题记录组,并为每个组提取每个用户的答案。例如,对于第一个用户,我们为用户1的答案选择最大值,如果不是用户1,则为NULL
。由于max忽略了NULL
值,因此这只会产生我们想要的答案。我写的CASE
表达式的较长形式是:
MAX(CASE WHEN userId = 1 THEN answers ELSE NULL END)
因此,在聚合给定问题时,我们在概念上会为用户提供MAX
一个答案和一堆空值,后者将被忽略。