MySQL_窗口函数_排序函数_ORDER BY

一.排序函数介绍

用法和参数

OVER (ORDER BY )

二.RANK()函数

描述

RANK()函数会返回排序后的排名序号(有并列,不连续)

用法和参数

RANK() OVER (ORDER BY …)

  • RANK()会返回每一行的等级(序号)
  • ORDER BY`对行进行排序将数据按升序或降序排列
  • RANK()OVER(ORDER BY …)是一个函数,与 ORDER BY 配合返回序号

实例

# 统计每个游戏的名字,分类,更新日期,更新日期序号
SELECT
    name,
    genre,
    updated,
    RANK() OVER (ORDER BY updated)
FROM game;

RANK()与ORDER BY多列排序

# 在列表中查找比较新,且安装包体积较小的游戏
SELECT
    *,
    RANK() OVER (ORDER BY released DESC , size ASC )
FROM game;

在窗口函数外使用RANK()与ORDER BY

SELECT
    name,
    RANK() OVER (ORDER BY editor_rating) as r
FROM game
ORDER BY size DESC ;

三.DENSE_RANK()函数

描述

RANK() 函数返回的序号,可能会出现不连续的情况。如果想在有并列情况发生的时候仍然返回连续序号可以使用dense_rank()函数(有并列,连续)

实例

# 统计每个游戏的名字,分类,更新日期,更新日期序号
SELECT
    name,
    genre,
    updated,
    DENSE_RANK() OVER (ORDER BY updated)
FROM game;

四.ROW_NUMBER()函数

描述

想获取排序之后的序号,也可以通过ROW_NUMBER() 来实现,返回行号。(无并列,连续)

实例

# 需求:将游戏按发行时间排序,返回唯一序号
SELECT *, ROW_NUMBER() OVER (ORDER BY released) FROM game;

五.NTILE(X)函数

描述

NTILE(X)函数将数据分成X组,并给每组分配一个数字

实例

# 将所有的游戏按照安装包大小分成4组,返回游戏名字,类别,安装包大小,和分组序号
SELECT
    *,
    ntile(4) OVER (ORDER BY size)
FROM game;

版权声明:本文为feizuiku0116原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。