sql 问题 高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/04 11:34:16
表member 有两个字段 name 和 department ,要查出每个部门name=null的条数 和 每个部门name!=null的条数 和 和每个部门的总体条数 ,用一个sql语句怎么完成?

select count(1) from member where [name] is null
union all
select count(1) from member where department is not null

oracle 10g:
SELECT a.total_num,
-- 每个部门的总体条数
NVL(b.null_num, 0),
-- 出每个部门name=null的条数
a.total_num - NVL(b.null_num, 0)
-- 每个部门name!=null的条数
(SELECT COUNT(*) as total_num,
department
FROM member
GROUP BY department
) a
LEFT JOIN
(SELECT COUNT(*) as null_num,
department
FROM member
WHERE name IS NULL
GROUP BY department
) b
ON a.department = b.department

select count(name), count(count(*)-count(name))
from member
where name is null

幻冰的答案也不能成立。幻冰写的条件是name is null,那么
count(count(*)-count(name))不会是name is not null的总条数的。

一个SQL语句好像不行
判断条件都没有办法放在一个语句里面

select department,count(slelect