group by分组查询

本文介绍了SQL中的GROUP BY分组查询,通过实例一展示了如何依据姓名统计各科分数,期望结果为学生的姓名及各科平均分。实例二中,讨论了如何根据国家人口数据统计亚洲和北美洲的人口数量。同时,文章还提及了GROUP BY子句处理NULL值的方式,即所有NULL值被视为一组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

group by实例

 

实例一

 

数据表:

姓名 科目 分数
张三 语文 80
张三 数学 98
张三 英语 65
李四 语文 70
李四 数学 80
李四 英语 90

期望查询结果:

姓名 语文 数学 英语
张三 80 98 65
李四 70 80 90

 

代码

create table testScore    
(    
   tid int primary key identity(1,1),    
   tname varchar(30) null,    
   ttype varchar(10) null,    
   tscor int null   
)    
go    
---插入数据    
insert into testScore values ('张三','语文',80)    
insert into testScore values ('张三','数学',98)    
insert into testScore values ('张三','英语',65)    
insert into testScore values ('李四','语文',70)    
insert into testScore values ('李四','数学',80)    
insert into testScore values ('李四','英语',90)    


select tname as '姓名' ,     
max(case ttype when '语文' then tscor else 0 end) '语文',     
max(case ttype when '数学' then tscor else 0 end) '数学',     
max(case ttype when '英语' then tscor else 0 end) '英语'     
from testScore     
group by tname


 

实例二

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)

 

国家(country) 人口(population)
中国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250


 

根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。

 

人口
亚洲1100
北美洲250
其他700

代码

 

SELECT  SUM(population),
        CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END
FROM    Table_A
GROUP BY CASE country
                WHEN '中国'     THEN '亚洲'
                WHEN '印度'     THEN '亚洲'
                WHEN '日本'     THEN '亚洲'
                WHEN '美国'     THEN '北美洲'
                WHEN '加拿大'  THEN '北美洲'
                WHEN '墨西哥'  THEN '北美洲'
        ELSE '其他' END;


 

 

GROUP BY子句中的NULL值处理

 

当GROUP BY子句中用于分组的列中出现NULL值时,将如何分组呢?SQL中,NULL不等于NULL(在WHERE子句中有过介绍)。然而,在GROUP BY子句中,却将所有的NULL值分在同一组,即认为它们是“相等”的。

 

 

参考资料:      SQL group by分组查询        http://www.studyofnet.com/news/247.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值