在SQL Server2005/2008中对记录进行分组,并获得每组前N条记录

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

本文为原创,如需转载,请注明作者和出处,谢谢!

    假设有一个表,SQL语句如下:
CREATE  TABLE  [ dbo ]. [ scan ](
     [ km ]  [ int ]  NULL,
     [ kh ]  [ int ]  NULL,
     [ cj ]  [ int ]  NULL
ON  [ PRIMARY ]

    其中km为科目号、kh为考生号、cj为成绩,现对km和kh进行分组,并获得每组前2条记录(按cj从高到低排序)。基本思想是为每组加一个序号列,再用where取序号小于等于2的。SQL语句如下:
select  *  from 
(
     select a.km,a.kh,cj,row_number()  over(partition  by a.km  order  by a.km,a.cj  desc) n
     from 
        ( select km,kh, SUM(cj) cj  from scan  group  by km,kh) a 
) b  where n <= 2  order  by km, cj  desc

最后得到的结果集如下图所示。


本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2009/11/03/1594919.html如需转载请自行联系原作者


银河使者

相关文章
sql server模糊查询、分组
sql server模糊查询、分组
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day10】电商分组TopK实战
每天一道大厂SQL题【Day10】电商分组TopK实战
113 0
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
SQL 数据挖掘 数据库
SQL分组函数
【7月更文挑战第24天】SQL分组函数
168 1
|
SQL 数据库
【SQL】已解决:SQL分组去重并合并相同数据
【SQL】已解决:SQL分组去重并合并相同数据
309 1
|
SQL
SQL SERVER数据分组后取第一条数据——PARTITION BY
SQL SERVER数据分组后取第一条数据——PARTITION BY
527 0
|
SQL 关系型数据库 MySQL
MySQL获取分组里的最新数据如何写sql
MySQL获取分组里的最新数据如何写sql
166 0
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
SQL HIVE
【Hive SQL 每日一题】分组排名取值
创建了一个名为`sales_data`的测试表,包含商品ID、销售额和销售日期。展示了部分示例数据。接着,提供了三个SQL查询:1) 查找每个商品销售额最高的记录;2) 获取每个商品最近和最远的销售记录;3) 求每个商品距今第二近的销售记录。每个查询都利用了窗口函数来处理数据,并给出了相应的查询结果图。
224 1
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
123 1