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

我有一个question表,里面一条记录是一道题,现在我要在界面上显示每套题的信息,需要获取每套题的题目数量和已审核的数量。(statu=1为已审核,0为未审核)表结构如... 我有一个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语句只能查出一个题目数量或者审核数量
如何让两个一起查询出来?
展开
 我来答
微医挂号网
2017-10-25 · 关注健康生活,分享健康常识。
微医挂号网
微医集团(原挂号网),互联网医院国家试点平台,聚合了全国1900家重点医院,,20万副主任以上的医师,提供预约挂号,在线诊疗,电子处方,在线配药全方位服务。找大专家,上微医。
向TA提问
展开全部

可以有两种解决方法,

所需工具: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

备注:两个都可以使用。

鲸鱼爸爸
2014-11-27 · TA获得超过472个赞
知道小有建树答主
回答量:614
采纳率:0%
帮助的人:426万
展开全部

除了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) 这个写得有点多余了,我在我数据库中是可以查出来的,

感谢感谢 采纳你的了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Conqueror
高粉答主

2018-03-31 · 关注我不会让你失望
知道大有可为答主
回答量:794
采纳率:100%
帮助的人:24.5万
展开全部

可以有两种解决方法。

方法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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Andy_Sun321
2014-11-27 · TA获得超过1376个赞
知道小有建树答主
回答量:811
采纳率:89%
帮助的人:728万
展开全部

用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!
追答
不错,我也学习了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式