模块 13 · 第 3 课(共 4)课程中的51/57~15 min
模块课程(3/4)
排名:ROW_NUMBER、RANK 和 DENSE_RANK
排名:ROW_NUMBER、RANK 和 DENSE_RANK
除了聚合之外,窗口函数在排序和排名方面也很出色。有一些专门设计用于在窗口内工作的函数(OVER() 成为强制性的),用于分配连续数字或排名位置。
为了使它们符合标准,我们必须在 OVER()** 内使用 ORDER BY 子句。
排名三人组
ROW_NUMBER():为每一行分配一个简单的序列号(1、2、3...),任意断开关系。RANK():产生“奥林匹克”效果:1、2、2、4。它会留下一个间隙(“3”被跳过),并在平局的情况下分配相同的排名。DENSE_RANK():密集排名:1、2、2、3。平局后永远不会有差距。
SQL
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;通过在 OVER() 中将 PARTITION BY 和 ORDER BY 组合在一起,我们可以获得“每个类别的前 3 名”!
锻炼#sql.m13.l3.e1
尝试:0加载中...
从客户表('customers')中提取'first_name'、'last_name'和'id'(假设'id'是标识符号)。使用 DENSE_RANK() 根据“id”降序(从最高到最低)添加“rank”列。
正在加载编辑器...
显示提示
DENSE_RANK() OVER(ORDER BY id DESC)。
3 次尝试后可用的解决方案
锻炼#sql.m13.l3.e2
尝试:0加载中...
根据产品(“产品”)的价格为每个“category_id”建立排名。提取“category_id”、“id”、“price”,并使用 ROW_NUMBER() 按“price”降序添加“price_rank”,按“category_id”分区。
正在加载编辑器...
显示提示
将 PARTITION BY Category_id ORDER BY Price DESC 合并到 OVER 内。
3 次尝试后可用的解决方案