本文为原创,如需转载,请注明作者和出处,谢谢!
假设有一个表,SQL语句如下:
<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
CREATE
TABLE
[
dbo
]
.
[
scan
]
(
[ km ] [ int ] NULL ,
[ kh ] [ int ] NULL ,
[ cj ] [ int ] NULL
) ON [ PRIMARY ]
[ km ] [ int ] NULL ,
[ kh ] [ int ] NULL ,
[ cj ] [ int ] NULL
) ON [ PRIMARY ]
其中km为科目号、kh为考生号、cj为成绩,现对km和kh进行分组,并获得每组前2条记录(按cj从高到低排序)。基本思想是为每组加一个序号列,再用where取序号小于等于2的。SQL语句如下:
<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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
(
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
最后得到的结果集如下图所示。
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!
《银河系列原创教程》 发布
《Java Web开发速学宝典》 出版,欢迎定购
本文介绍了一种SQL技巧,通过使用分组和窗口函数row_number()实现对数据的特定排序与筛选。具体展示了如何获取分组后每组中按成绩从高到低排序的前两条记录。

被折叠的 条评论
为什么被折叠?



