在此方案中如何在SQL中使用GROUP BY和COUNT

时间:2014-11-14 05:59:47

标签: 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

我想到这种方式,但还有其他优雅的方法吗?感谢

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

2 个答案:

答案 0 :(得分:1)

一种方法是使用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

答案 1 :(得分:1)

也许这会更优雅:

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