如何把count(*)为0的记录也显示出来 ,因为如果记录数为0时,却不能显示它的记录数为0

aa806525280 2009-04-28 01:08:46
求:学各科目的学生人数 sql 语句
有两个表,一个 科目表 字段: 科目号 ,科目名

另一个 学生成绩表 字段: 学号,科目号,成绩
求:select 科目号,科目名,count() 为该科目人数 三个字段 的sql语句


问题:如果记录数为0时,怎样显示它的记录数为0

昨天发帖得到两个sql语句:
select a.科目号,a.科目名,count(*) from 科目表 a inner join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名

select a.科目号,a.科目名,count(*) as 该科目人数
from 科目表 a left join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名


第一条的问题是:如果记录数为0时,就不显示那科目
第二条的问题是:如果记录数为0时,却显示那科目的记录数为1

请问 应怎么解决?
...全文
1112 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa806525280 2009-04-28
  • 打赏
  • 举报
回复
谢谢你们! 终于可以了 8楼和13楼都可以
ouyang3857116 2009-04-28
  • 打赏
  • 举报
回复
select a.科目号,a.科目名,count(学号) as 该科目人数
from 科目表 a left join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名
claro 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aa806525280 的回复:]
我发现count(*)的结果永远不等于0,为什么?
[/Quote]对*计数,怎么会是0呢?
zxkid 2009-04-28
  • 打赏
  • 举报
回复
SELECT p.科目号,p.科目名, 人数 = ISNULL(j.人数, 0)
FROM 科目表 p
LEFT JOIN
(
SELECT 科目号, COUNT(DISTINCT 学号) 人数
FROM 学生成绩表
GROUP BY 科目号
) j
ON j.科目号 = p.科目号
ORDER BY 科目号
zxkid 2009-04-28
  • 打赏
  • 举报
回复

SELECT 科目号,科目名, 人数 = ISNULL(人数, 0)
FROM 科目表 p
LEFT JOIN
(
SELECT 科目号, COUNT(DISTINCT 学号) 人数
FROM 学生成绩表
GROUP BY 科目号
) j
ON j.科目号 = p.科目号
ORDER BY 科目号
duset 2009-04-28
  • 打赏
  • 举报
回复

select a.科目号,a.科目名,count(b.科目号) from 科目表 a left join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名

/*
1 0
2 0
3 0

*/




aa806525280 2009-04-28
  • 打赏
  • 举报
回复
我发现count(*)的结果永远不等于0,为什么?
aa806525280 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 guguda2008 的回复:]
select a.科目号,a.科目名,count(*) from 科目表 a inner join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名
改成
select a.科目号,a.科目名,count(*) from 科目表 a right join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名
试试
[/Quote]
这个还不行啊
我的意思是要:如果记录数为0时,则显示它的记录数为0
htl258_Tony 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sdhdy 的回复:]
SQL code
--1
select a.科目号,a.科目名,count(*) from 科目表 a inner join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名 having count(1)>0
--2
select a.科目号,a.科目名,case when count(*)=0 then 1 else count(*) end as 该科目人数
from 科目表 a left join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名
[/Quote]
支持
guguda2008 2009-04-28
  • 打赏
  • 举报
回复
这个触发器专家太快了。。。
guguda2008 2009-04-28
  • 打赏
  • 举报
回复
select a.科目号,a.科目名,count(*) from 科目表 a inner join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名
改成
select a.科目号,a.科目名,count(*) from 科目表 a right join 学生成绩表 b on a.科目号=b.科目号 group by a.科目号,a.科目名
试试
sdhdy 2009-04-28
  • 打赏
  • 举报
回复

--1
select a.科目号,a.科目名,count(*) from 科目表 a inner join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名 having count(1)>0
--2
select a.科目号,a.科目名,case when count(*)=0 then 1 else count(*) end as 该科目人数
from 科目表 a left join 学生成绩表 b on a.科目号=b.科目号
group by a.科目号,a.科目名
  • 打赏
  • 举报
回复
group by all 试试

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧