一条sql语句中的多个select

一条sql语句中的多个select,sql,count,Sql,Count,我有一个调查答案表,类似于: 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(*)

我有一个调查答案表,类似于:

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)
但我不确定我是否能做得更好,也不确定在哪里添加日期范围过滤。

您可以使用:

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
您对“case”的实现可能会有所不同,重要的是您可以将所有不希望为null的内容设置为null,并且它不会被count()计数:)

您可以使用:

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

您对“case”的实现可能会有所不同,重要的是您可以将所有不希望为null的内容设置为null,并且它不会被count()计数:)

spiny norman的第一个查询将给出如下结果:

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
它只对不同结果的夫妇进行分组。我假设您想按问题对“是/否”的总数进行分组。在这种情况下,您必须这样做:

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

spiny norman的第一个查询将给出如下结果:

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
它只对不同结果的夫妇进行分组。我假设您想按问题对“是/否”的总数进行分组。在这种情况下,您必须这样做:

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

您能指定您正在使用的服务器的类型吗?SQL Server、Oracle、MySQL等。能否指定您使用的服务器类型?SQL Server、Oracle、MySQL等。