• mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数


    在做项目的时候需要些分页,用的数据库MySQL,之前看到的参考例子是用MS SQL做的,在MS SQL、Oracle里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组。百度后的结论总结如下:

    (一)先说下在mysql里面分页时的sql语句,转载自http://topic.csdn.net/u/20090504/15/bfbc217b-4ae4-4f36-9810-21de077fb034.html第13、14楼:

    MySQL中的分页比较容易,只要在程序中中得到是从哪条记录开始,需要取多少个记录就行了。

    比如页长 10, 那么第8页就是自 第81 条记录取10条,语句类似于:

    select * from tbl_user order by c_uid limit 80,10


    limit 的用法,可以参考MySQL的官方文档说明。
    http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select
    13.2.7. SELECT语法

    LIMIT子句可以被用于限制被SELECT语句返回的行数。LIMIT取一个或两个数字自变量,自变量必须是非负的整数常数(当使用已预备的语句时除外)。

    使用两个自变量时,第一个自变量指定返回的第一行的偏移量,第二个自变量指定返回的行数的最大值。初始行的偏移量为0(不是1):

    mysql> SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15为了与PostgreSQL兼容,MySQL也支持LIMIT row_count OFFSET offset语法。

    如果要恢复从某个偏移量到结果集合的末端之间的所有的行,您可以对第二个参数是使用比较大的数。本语句可以恢复从第96行到最后的所有行:

    mysql> SELECT * FROM tbl LIMIT 95,18446744073709551615;

    使用1个自变量时,该值指定从结果集合的开头返回的行数:

    mysql> SELECT * FROM tbl LIMIT 5;     # Retrieve first 5 rows

    换句话说,LIMIT n与LIMIT 0,n等价。

    对于已预备的语句,您可以使用位置保持符。以下语句将从tb1表中返回一行:

    mysql> SET @a=1;mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";
    mysql> EXECUTE STMT USING @a;

    以下语句将从tb1表中返回第二到第六行:

    mysql> SET @skip=1; SET @numrows=5;mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";
    mysql> EXECUTE STMT USING @skip, @numrows;

    (二)在MS SQL里面,有ROW_NUMBER() OVER函数:

    转载自http://www.cnblogs.com/fxgachiever/archive/2010/09/15/1826792.html

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

    简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
    示例:
    xlh           row_num
    1700              1
    1500              2
    1085              3
    710                4

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

    实例:

    初始化数据

    create table employee (empid int ,deptid int ,salary decimal(10,2))
    insert into employee values(1,10,5500.00)
    insert into employee values(2,10,4500.00)
    insert into employee values(3,20,1900.00)
    insert into employee values(4,20,4800.00)
    insert into employee values(5,40,6500.00)
    insert into employee values(6,40,14500.00)
    insert into employee values(7,40,44500.00)
    insert into employee values(8,50,6500.00)
    insert into employee values(9,50,7500.00)

    数据显示为

    empid       deptid      salary
    ----------- ----------- ---------------------------------------
    1           10          5500.00
    2           10          4500.00
    3           20          1900.00
    4           20          4800.00
    5           40          6500.00
    6           40          14500.00
    7           40          44500.00
    8           50          6500.00
    9           50          7500.00

    需求:根据部门分组,显示每个部门的工资等级

    预期结果:

    empid       deptid      salary                                  rank
    ----------- ----------- --------------------------------------- --------------------
    1           10          5500.00                                 1
    2           10          4500.00                                 2
    4           20          4800.00                                 1
    3           20          1900.00                                 2
    7           40          44500.00                               1
    6           40          14500.00                               2
    5           40          6500.00                                 3
    9           50          7500.00                                 1
    8           50          6500.00                                 2

    SQL脚本:

    SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

  • 相关阅读:
    java语言实现堆排序
    堆排序
    静态分派
    谈mysql优化
    Unity2017.1官方UGUI文档翻译——Canvas
    Unity2017.1官方UGUI文档翻译——Rect Transform
    Unity2017.1官方UGUI文档翻译——Rich Text
    Unity2017.1官方UGUI文档翻译——Auto Layout
    Unity2017.1官方UGUI文档翻译——Animation Integration
    Unity2017.1官方UGUI文档翻译——Interaction Components
  • 原文地址:https://www.cnblogs.com/Fooo/p/6603432.html
Copyright © 2020-2023  润新知