Mysql 在此场景中,如何在SQL中使用GROUPBY和COUNT

Mysql 在此场景中,如何在SQL中使用GROUPBY和COUNT,mysql,sql,database,relational-database,relationship,Mysql,Sql,Database,Relational Database,Relationship,我在一个投票系统上工作,有一个调查表,我像这样记录数据 survey -------------- id q1 q2 q3 其中q1表示问题1,可能值为1、2、3,(表示用户选择第一、第二..选项),而q2表示问题2,可能值为1、2、3、4、5..等等 在这种情况下,我想进行一个查询,对于每个问题,计算每个选项的总数,因此,查询结果应该是这样的 q1 , first choice , 10 q1 , second, 50 q1 , third , 20...and so on 我想这样做,但

我在一个投票系统上工作,有一个调查表,我像这样记录数据

survey
--------------
id
q1
q2
q3
其中q1表示问题1,可能值为1、2、3,(表示用户选择第一、第二..选项),而q2表示问题2,可能值为1、2、3、4、5..等等

在这种情况下,我想进行一个查询,对于每个问题,计算每个选项的总数,因此,查询结果应该是这样的

q1 , first choice , 10
q1 , second, 50
q1 , third , 20...and so on
我想这样做,但还有其他优雅的方法吗?谢谢

(SELECT COUNT(1) as q1_third FROM survey WHERE q1 = 3)...

一种方法是在COUNT或SUM()中使用case语句,如下所示

SELECT
    SUM(CASE WHEN q1 = 1 THEN 1 ELSE 0 END) as q1_first,
    SUM(CASE WHEN q1 = 2 THEN 1 ELSE 0 END) as q1_second,
    SUM(CASE WHEN q1 = 3 THEN 1 ELSE 0 END) as q1_third
FROM survey

也许这会更优雅:

select 'q1', q1, count(*) as n from survey group by q1
union all
select 'q2', q2, count(*) as n from survey group by q2
union all
select 'q3', q3, count(*) as n from survey group by q3
order by 1, 2

@user3538235我建议使用SUM而不是COUNTRight,因为0仍然算作某物。。。谢谢:)如果您想使用COUNT,请使用COUNT(当q1=1时,则为q1,否则为null END)