TOP-N

作者: 扶不起的蝌蚪 | 来源:发表于2021-12-18 01:02 被阅读0次

    TOP-N

    SQL标准中定义了用于对最终结果进行限定的 OFFSET子句FETCH子句。但是,许多数据库使用了另一种实现(LIMIT子句)

    -- Oracle、SQL Server
    -- PostgresQL、Db2
    
    SELECT column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    FETCH FIRST N ROWS ONLY
    
    -- MySQL、PostgresQL
    -- Db2、SQLite
    
    SELECT column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    LIMIT N
    

    分页查询

    结合使用 OFFSET子句和 FETCH子句可以实现分页的效果

    -- Oracle、SQL Server
    -- PostgresQL、Db2
    --即M为页码(pageIndex),N为页大小(pageSize)
    --M如果为0的话就是取第一页的N条数据
    
    SELECT column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    OFFEST M ROWS
    FETCH FIRST N ROWS ONLY
    
    -- MySQL、PostgresQL
    -- Db2、SQLite
    
    SELECT column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    LIMIT N OFFEST M
    

    MySQL,Db2以及 SQLite还支持简写形式

    -- MySQL、 Db2、SQLite
    
    SELECT column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    LIMIT M,N
    

    数据库特有语法

    • 一些数据库产品现了SQL标准中的 OFFSET FETCH语法
    • 某些数据库支持LiMIT OFFSET语法
    • 个别数据库支持专用语法。

    Oracle

    在更早的版本(Oracle 11g+)的Oracle需要用子查询的方式实现同样的效果

    子查询

    Oracle 11g+不仅支持指定按条数进行指定,还支持按百分比进行指定
    注:EMPLOYEES表共107条数据

    按条数进行指定 按百分比进行指定

    除此之外,在做排序显示的时候,可能会出现多条记录,排名是相同的,默认的写法会在排名相同的记录中随机选择一条就返回了,如果在后面加上WITH TIES,那么排名相同的数据都会被返回

    SQL Server

    SELECT TOP(N)
           column1,
           column2,...
      FROM table
    [WHERE conditions]
    [ORDER BY colmun3,...]
    
    TOP(N)

    相关文章

      网友评论

          本文标题:TOP-N

          本文链接:https://www.haomeiwen.com/subject/hksfzltx.html