MySQL:如何查询以并排显示两个用户的答案

时间:2017-10-18 06:10:21

标签: mysql sql

我有一些包含行的表

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?

1 个答案:

答案 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一个答案和一堆空值,后者将被忽略。

Demo