SQL语句中group by 问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 19:38:59
比如 学生信息表 字段如下
NO 姓名 性别(1-男 2-女) 出生日期
1 王 1 19880101
2 李 1 19881102
3 张 1 19880513
4 赵 1 19881124

如果想统计该表学生的性别分布情况
SELECT 性别,count(性别) FROM 学生信息表 GROUP BY 性别
结果为
性别 count(性别)
1 4

如果想实现如下效果,需要如何实现呢?
结果为
性别 count(性别)
1 4
2 0

希望过路的高手帮忙指教一下!
如果想通过一个SQL语句实现可以么?如果可以的话SQL语句应该如何书写呢?最好能举个例子,急!谢谢了!

自表关联,使用左连接
A数据集合是取出所有不重复的〔性别〕
B数据集合是统计各〔性别〕的总数
根据〔性别〕关联两数据集,当数量为NULL时,设置为0
如下:
SELECT A.性别,ISNULL(B.数量,0) 数量
FROM
(
SELECT DISTINCT 性别
FROM [Table]
) AS A
LEFT JOIN
(
SELECT 性别,COUNT(*) AS 数量
FROM [Table]
GROUP BY 性别
) B
ON A.性别 = B.性别

但是当表中只有一种〔性别〕的话,是无法出其它结果,除非能列出〔性别〕字段应该包括的全部值(字典表)

假如你只是针对当前这一种情况,想要实现的话,就只能使用UNION来实现了
但是那样的话,就要自己确定〔性别〕字段的全部可能值,这就不符合数据库的查询啊

group by是分组的语句。
你是要查询两个结果出来。
只需要加个AND再打后面的语句就可以了。