一、建表

if exists (select * from sysobjects where id = OBJECT_ID('[test]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [test] 
CREATE TABLE [test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [name] [nvarchar] (50) NULL , [votenum] [int] NULL , [type] [nvarchar] (50) NULL )
ALTER TABLE [test] WITH NOCHECK ADD CONSTRAINT [PK_test] PRIMARY KEY NONCLUSTERED ( [id] )

SET IDENTITY_INSERT [test] ON

INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 1 , '嶂石岩' , 88 , '风景' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 2 , '云梦山' , 99 , '风景' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 3 , '抱犊寨' , 59 , '风景' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 4 , '崆山白云洞' , 46 , '风景' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 5 , '扁鹊庙' , 56 , '古迹' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 6 , '金长城' , 22 , '古迹' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 7 , '避暑山庄' , 69 , '古迹' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 8 , '西柏坡' , 87 , '古迹' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 9 , '塞罕坝' , 48 , '草原' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 10 , '草原天路' , 44 , '草原' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 11 , '京北草原' , 36 , '草原' )
INSERT [test] ( [id] , [name] , [votenum] , [type] ) VALUES ( 12 , '美林谷' , 77 , '草原' )

SET IDENTITY_INSERT [test] OFF

二、说明

1、字段含义:name 风景区名称,votenum 景区得票数量 ,type 景区类型

2、实现功能:分页查出5-10条的数据,按id倒序排列并且相同的景区类型只取前两个

三、实现

1、实现分页

SELECT * FROM (
select *,ROW_NUMBER() over(order by id desc) row from test) T
WHERE T.row BETWEEN 1 AND 6

2、实现分组并去除组内前两条数据

select * from (
select *,ROW_NUMBER() over(partition by [type] order by id desc) vn from test) b
where b.vn<=2

三、实现分页+分组

SELECT * FROM (
select *,ROW_NUMBER() over( order by id desc) row from (select * from (
select *,ROW_NUMBER() over(partition by [type] order by id desc) vn from test WHERE id < 12) b
where b.vn<=2)bb) T
WHERE t.row BETWEEN 5 AND 10

三、总结

本文要点:第一步使用partition by函数对表格进行分组排序并每组只取前两个,第二步是使用sql分页的方式对第一步获取的数据进行分页

四、感谢

本文部分内容引用自

http://www.cnblogs.com/zhouxiuquan/p/4848765.html

sql 实现分页+分组并取出分组内的前n条数据的更多相关文章

  1. sql 分组后显示每组的前几条记录

    sql 分组后显示每组的前几条记录 如   表中记录是             code       serialno             A1               1           ...

  2. sql-实现select取行号、分组后在分组内排序、每个分组中的前n条数据

    表结构设计: 实现select取行号 sql局部变量的2种方式 set @name='cm3333f'; select @id:=1; 区别:set 可以用=号赋值,而select 不行,必须使用:= ...

  3. MySQL 分组后取每组前N条数据

    与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...

  4. SQL Server 获取满足条件的每个条件下的前N条数据

    从数据库获取数据时,经常会遇到获取一个数据列表和该列表中每条数据对应的另一个列表的情况,如果二级列表获取的是全部数据,那么就比较简单.如果二级列表获取的是前n条数据,就会比较麻烦. 从操作上来看,好像 ...

  5. 不同数据库,查询前n条数据的SQL语句

    不同的数据库,支持的SQL语法略有不同,以下是不同数据库查询前n条数据的SQl语句 SQL Server(MSSQL) SELECT TOP n * FROM table_name ORACLE SE ...

  6. SQL学习(三)Select语句:返回前多少行数据

    在实际工作中,我们可能根据某种排序后,只需要显示前多少条数据,此时就需要根据不同的数据库,使用不同的关键字 一.SQL Server/Access select top 数量/百分比 from tab ...

  7. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

  8. sql server 分组,取每组的前几行数据

    sql中group by后,获取每组中的前N行数据,目前我知道的有2种方法 比如有个成绩表: 里面有字段学生ID,科目,成绩.我现在想取每个科目的头三名. 1.   子查询 select * from ...

  9. mysql 分组统计、排序、取前N条记录解决方案

    需要在mysql中解决记录的分组统计.排序,并抽取前10条记录的功能.现已解决,解决方案如下: 1)表结构 CREATE TABLE `policy_keywords_rel` ( `id` int( ...

随机推荐

  1. SQL_2008安装教程(完整版)

    Win 7 win xp系统中SQL2008安装注意事项一:SQL2008 镜像下载地址 http://download.microsoft.com/download/4/C/4/4C402E48-0 ...

  2. 【Java】java获取json中某个字段

    import com.alibaba.fastjson.JSONObject; public class JsonTest { public static void main(String[] arg ...

  3. Python基础教程(017)--执行Python的方式解释器运行及其他几种解释器简介

    前言 了解Python的解释器 内容 Python的解释器乳交有多个语言的实现 cPython---官方版本的C语言实现 Jython--可以运行在java平台 IronPython--可以运行在.n ...

  4. AcWing 312. 乌龟棋 (简单DP)打卡

    题目:https://www.acwing.com/problem/content/description/314/ 题意:有一段路,每个格子都有个价值,然后有m张卡牌,四种类型,走1,2,3,4步, ...

  5. css3D动画

    css3D动画 前言 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总结一下. 在阅读这篇博客之前,请先自行了解一下css 3D的属性,例如:transform-style,transf ...

  6. yii2和laravel比较

    yii2和laravel比较 一.总结 一句话总结: 开发速度两者相当:laravel的artisan工具和yii的gii有异曲同工的效果,借助于artisan工具,可以快速创建控制器.模型和路由等. ...

  7. mysql创建,添加主键

    primary key 1.最简单的: CREATE TABLE t1( id int not null, name char(20)); 2.带主键的: a:CREATE TABLE t1( id ...

  8. 112、TensorFlow初始化变量

    # 创建一个变量 # 最简单创建一个变量的方法就是调用 tf.get_variable function import tensorflow as tf # 下面创建了一个三维的张量大小是 [1,2, ...

  9. 测开之路五十一:代码实现MongoDB增删改查

    初始化时连接.析构时断开连接 from pymongo import MongoClient class Mogo(object): def __init__(self, host='127.0.0. ...

  10. Bash Shell中命令行选项/参数处理

    0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home ...