mysql按条件多次选择进入列

gr8qqesn  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(398)

mysql数据库中有3个表:
-问题(id、内容)
-答案(id、内容、问题),其中问题是一个外键,告诉我们答案与哪个问题相关
-调查(survey\u id,answer),其中调查id对于接受调查的一个人是唯一的,并且答案表示他给出的答案。
现在我想写一个查询,显示一个表,其中包含接受调查的人的id以及他在不同列中给出的所有答案。
我的问题是:

select survey.survey_id, 
    CASE WHEN answers.question = 1
    then answers.content
    end
    as 'Question 1',
    CASE WHEN answers.question = 2
    then answers.content
    end
    as 'Question 2'
    from survey inner join answers on survey.answer_id = answers.id;

但我不认为这是一种方式去,我得到什么是显示在图片上(与空)

现在我想得到的是:

正确的方法是什么?

wlzqhblo

wlzqhblo1#

使用条件聚合:

select s.survey_id, 
       max(case when a.question = 1 then a.content end) as Question_1,
       max(case when a.question = 2 then a.content end) as Question_2
from survey s inner join
     answers a
     on s.answer_id = a.id
group by s.survey_id;

笔记:
所有表都有别名。
所有列都是限定的,这意味着它们明确地指定了它们来自的表。
仅对字符串和日期常量使用单引号。不要对表别名使用单引号。

pexxcrt2

pexxcrt22#

您可以使用(假)聚合函数来减少行数,例如:

select survey.survey_id, 
      max(CASE WHEN answers.question = 1
        then answers.content
      end)  as 'Question 1',
      max(CASE WHEN answers.question = 2
        then answers.content
      end)  as 'Question 2'
  from survey inner join answers on survey.answer_id = answers.id
  group by survey.survey_id

相关问题