sql一个表中同时查询两个count的sql语句
表结构如下
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 · 关注健康生活,分享健康常识。
可以有两种解决方法,
所需工具: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
备注:两个都可以使用。
除了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) 这个写得有点多余了,我在我数据库中是可以查出来的,
感谢感谢 采纳你的了
可以有两种解决方法。
方法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
用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!
不错,我也学习了。