• SQL Server RANK()函数简介


    RANK()函数是一个Window函数,它为结果集的分区中的每一行分配一个排名。

    分区中具有相同值的行将获得相同的排名。 分区中第一行的等级是1RANK()函数将绑定行的数量添加到绑定等级以计算下一行的等级,因此,等级可能不是连续的。

    RANK()函数的语法如下所示:

    RANK() OVER (
        [PARTITION BY partition_expression, ... ]
        ORDER BY sort_expression [ASC | DESC], ...
    )

    在这个语法中:

    • 首先,PARTITION BY子句划分应用该函数的结果集分区的行。
    • 其次,ORDER BY子句指定应用该函数每个分区中行的逻辑排序顺序。

    RANK()函数对于求解前N个和后N个报表很有用。

    SQL Server RANK()说明

    首先,创建一个名为sales.rank_demo的新表,其中包含一列:

    CREATE TABLE sales.rank_demo (
     v VARCHAR(10)
    );

    其次,向sales.rank_demo表中插入一些行:

    INSERT INTO sales.rank_demo(v)
    VALUES('A'),('B'),('B'),('C'),('C'),('D'),('E');

    第三,从sales.rank_demo表中查询数据:

    SELECT 
     v
    FROM
     sales.rank_demo;

    第四,使用ROW_NUMBER()sales.rank_demo表的结果集中的行分配排名:

    SELECT
     v,
     RANK () OVER ( 
     ORDER BY v 
     ) rank_no 
    FROM
     sales.rank_demo;

    执行上面查询语句,得到以下结果:

    从输出中清楚地显示,第二和第三行接收相同的等级,因为它们具有相同的值B。第四和第五行得到等级4,因为RANK()函数跳过等级3并且它们也具有相同的值(4)。

    SQL Server RANK()函数示例
    下面将使用production.products表来演示如何使用RANK()函数:
    1. 在结果集中使用RANK()函数示例
    以下示例使用RANK()函数按产品价格对产品进行排名:
    1 SELECT
    2  product_id,
    3  product_name,
    4  list_price,
    5  RANK () OVER ( 
    6  ORDER BY list_price DESC
    7  ) price_rank 
    8 FROM
    9  production.products;

    执行上面查询语句,得到以下结果:

    在此示例中,因为未指定PARTITION BY子句,所以RANK()函数将整个结果集视为单个分区。

    RANK()函数为结果集中的每一行分配一个排名,按价格从高到低排序。

    2. 在分区上使用RANK()函数示例
    此示例使用RANK()函数按每个品牌的价格为每个产品分配排名,并返回排名小于或等于三的产品:

     1 SELECT * FROM (
     2  SELECT
     3  product_id,
     4  product_name,
     5  brand_id,
     6  list_price,
     7  RANK () OVER ( 
     8  PARTITION BY brand_id
     9  ORDER BY list_price DESC
    10  ) price_rank 
    11  FROM
    12  production.products
    13 ) t
    14 WHERE price_rank <= 3;

    执行上面查询语句,得到以下结果:

    在这个例子中:

    • 首先,PARTITION BY子句按品牌ID将产品划分为分区。
    • 其次,ORDER BY子句按价格对每个分区中的产品进行排序。
    • 第三,外部查询返回排名值小于或等于3的产品。

    RANK()函数应用于每个分区中的每一行,并在跨越分区的边界时重新初始化。

    原文出自【易百教程】原文链接:https://www.yiibai.com/sqlserver/sql-server-rank-function.html





  • 相关阅读:
    javascript定义函数后立即执行(IIFE)
    工作流选型专项,Camunda or flowable or?
    Excel中的xlsm宏密码怎么破解
    《生命是什么》总结
    《麦肯锡教我的思考武器》总结
    《作为意志和表象的世界》总结
    Go语言如何将json时间格式化为dateime格式
    《少有人走的路》总结
    《时间简史》总结
    架构的常规分类及复用重点
  • 原文地址:https://www.cnblogs.com/xiaoyue1606bj/p/11021751.html
Copyright © 2020-2023  润新知