SQL -- 使用PARTITION和RANK函数完成统计

本文通过具体实例介绍了如何使用SQL中的PARTITION和RANK函数来进行复杂的统计分析。包括如何统计学生的总分、科目的总分和班级的总分,以及如何根据总分对学生进行排名等。

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

SQL -- 使用PARTITION和RANK函数完成统计


有时需要对查询结果集进行内部分组,或统计排名,这时PARTITION和RANK非常有用。下例以学生成绩表为例,演示一下用法:


1 创建测试表:
CREATE TABLE [dbo].[StudentScore](
	[Id] [int] NOT NULL,
	[Name] [nvarchar](20) NULL,
	[ClassId] [int] NOT NULL,
	[Subject] [nvarchar](20) NULL,
	[Score] [decimal](18, 0) NULL
) ON [PRIMARY]


GO




表说明:
name: 学生名字
classId: 班级id
subject: 科目
score : 分数


查询实例1: 统计学生总分,科目总分,班级总分。
-- use SUM + Partition to stastic total score 
select s.Name,classId,
	   SUM(s.Score) OVER (PARTITION BY name) as StudentTotalScore,
	   SUM(s.Score) OVER (PARTITION BY Subject) as SubjectTotalScore,
	   SUM(s.Score) OVER (PARTITION BY classId)  as ClassTotalScore
FROM StudentScore s
order by StudentTotalScore






查询实例2: 统计学生总分,并按照学生总成绩进行排名(不区分班级)。
-- use SUM() + RANK() stastic student total score and ranking
select s.Name,classid,
		SUM(s.Score),
	   RANK() OVER (ORDER BY SUM(s.Score) DESC ) as Ranking
FROM StudentScore s
group by s.Name,classid






查询实例3: 统计学生总分,按总成绩排名,并区分班级。
-- use SUM() + RANK() + PARTITION  to stastic total score and ranking for individule class Id


select s.Name,classid,
		SUM(s.Score),
	   RANK() OVER (PARTITION BY classid ORDER BY SUM(s.Score) DESC ) as Ranking
FROM StudentScore s
group by s.Name,classid



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值