sql一个表中同时查询两个count的sql语句

我有一个question表,里面一条记录是一道题,现在我要在界面上显示每套题的信息,需要获取每套题的题目数量和已审核的数量。(statu = 1为已审核,0为未审核)
表结构如下
questionID paperName statu
1 xx学校期中考试 1
2 xx学校期中考试 1
3 xx学校期中考试 0
4 xx学校期末考试 0
4 xx学校期末考试 1
查询出的结果是
试卷名 题目数量 审核数量
xx学校期中考试 3 2
xx学校期末考试 2 1

我写的sql
select COUNT(1) as 总题数,paperName from question where
papername in(select distinct paperName from question)
group by paperNme
select COUNT(1) as 审核题数,paperName from question where
papername in(select distinct paperName from question) and statu=1
group by paperNme
我的的sql语句只能查出一个题目数量或者审核数量
如何让两个一起查询出来?

可以有两种解决方法,

所需工具:SQL

查询两个count的方法1:

SELECT paperName
    , COUNT (1) AS 总题数
    , sum (CASE WHEN statu = 1 THEN 1 ELSE 0 END) AS 审核题数
FROM question
GROUP BY paperNme

查询两个count的方法2:

select s.总题数, s.审核题数, s.paperName
from (
select COUNT(1) as 总题数, case when status = 1 then count(1) else 0 end as 审核题数,  paperName
from question
--where papername in (select distinct paperName from question), 这个条件可以不要了
group by paperNme, stauts -- status也要作为分组字段,因为在case中有使用
) s

备注:两个都可以使用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-27

除了count之外还有一个函数叫做 SUM。

SELECT paperName
    , COUNT (1) AS 总题数
    , sum (CASE WHEN statu = 1 THEN 1 ELSE 0 END) AS 审核题数
FROM question
GROUP BY paperNme

papername in(select distinct paperName from question)   这个没意义吧? 都是同一张question表,要不就是你表名写错了。


Good Luck !

追问

恩恩,写的这个可以查出来,之前还没怎么用过sum,现在知道了
papername in(select distinct paperName from question) 这个写得有点多余了,我在我数据库中是可以查出来的,

感谢感谢 采纳你的了

本回答被提问者采纳
第2个回答  2018-03-31

可以有两种解决方法。

方法1:

SELECT paperName

, COUNT (1) AS 总题数

, sum (CASE WHEN statu = 1 THEN 1 ELSE 0 END) AS 审核题数

FROM question

GROUP BY paperNme 

方法2:

select s.总题数, s.审核题数, s.paperName

from (

select COUNT(1) as 总题数, case when status = 1 then count(1) else 0 end as 审核题数,  paperName

from question

--where papername in (select distinct paperName from question), 这个条件可以不要了

group by paperNme, stauts -- status也要作为分组字段,因为在case中有使用

) s

本回答被网友采纳
第3个回答  2014-11-27

用case when根据条件计数:

select s.总题数, s.审核题数, s.paperName
from (
select COUNT(1) as 总题数, case when status = 1 then count(1) else 0 end as 审核题数,  paperName
from question
--where papername in (select distinct paperName from question), 这个条件可以不要了
group by paperNme, stauts -- status也要作为分组字段,因为在case中有使用
) s

追问

你写的也蛮不错,但是别人先回答的问题已近解决了
sorry!

追答

不错,我也学习了。