我有一份调查答案表,如:
date | q1 | q2 |
12/12/10 | yes | no |
12/13/10 | no | no |
我想创建一个查询来获取此表的结果摘要,允许我设置相关的日期范围。 以下陈述非常有效:
SELECT ( SELECT Count(*)
FROM `survey`
WHERE q1='Yes') AS q1_yes,
( SELECT Count(*)
FROM `survey`
WHERE q1='No') AS q1_no,
( SELECT Count(*)
FROM `survey`
WHERE q2='Yes') AS q2_yes)
但我不确定我是否能做得更好,还有在哪里添加日期范围过滤。
答案 0 :(得分:3)
您可以使用:
select q1, q2, count(*)
from survey
group by q1, q2
或者,如果您想获得完全相同的结果:
select count(case when q1 = 'Yes' then q1 else null end) as q1_yes,
count(case when q1 = 'No' then q1 else null end) as q1_no,
count(case when q2 = 'Yes' then q2 else null end) as q2_yes
from survey
您对“案例”的实施可能会有所不同,重要的是您可以设置您不想要的所有内容,并且不会被count()计算:)
答案 1 :(得分:2)
来自多刺诺曼的第一个查询将给出如下结果:
q1 q2 count(*)
no yes 2
yes no 1
yes yes 1
其中只有不同结果的夫妻群。我假设您想要对问题的总数进行分组。在这种情况下,你必须做那样的事情:
SELECT 'q1' as Question, s1.q1 as Answer, count(*) as Count
FROM survey s1
WHERE date>='2010-10-01' AND date<'2010-10-30'
GROUP BY q1
UNION
SELECT 'q2' as Question, q2 as Answer, count(*) as Count
FROM survey
WHERE date>='2010-10-01' AND date<'2010-10-30'
GROUP BY q2
结果:
Question Answer Count
q1 no 2
q1 yes 2
q2 no 1
q2 yes 3