SQL中常用的排序算法

图片

DENSE_RANK()是一种高级SQL窗口函数,可为结果集中的每个不同值生成一个排名,同时考虑并确保后续值获得连续的排名。

图片

一、了解DENSE_RANK()

RANK()ROW_NUMBER()等其他排序函数不同,DENSE_RANK()将具有相同值的行分配相同的排名,然后通过共享相同值的行数递增排序。

一般的语法如下:

DENSE_RANK() OVER (ORDER BY column)
  • ORDER BY指定用于对结果集进行排序的列或表达式。
DENSE_RANK() OVER (PARTITION BY column ORDER BY column)
  • PARTITION BY是一个可选的子句,用于根据指定的列将结果集划分为多个分区。排序在每个分区内分别应用。

二、代码示例

让我们通过一些实际的代码示例来说明DENSE_RANK()函数的强大功能:

2.1 创建排名

-- 首先,让我们创建一个名为employees的表:
CREATE TABLE employees (
  id integer,
  first_name varchar(20),
  last_name varchar(20),
  position varchar(20),
  salary varchar(20)
);


-- 让我们向表employees中添加一些值:
INSERT INTO employees VALUES 
(1, 'James', 'Flynn', 'Manager', 62000),
(2, 'Ajay', 'Ramoray', 'Manager', 62000),
(3, 'Ayse', 'Berry', 'Senior Manager', 98000),
(4, 'Gail', 'Edward', 'Associate', 50000),
(5, 'Maria', 'Frey', 'Senior Associate', 82000),
(6, 'Daniel', 'Lordman', 'Associate', 73000),
(7, 'Ferehsteh', 'Asmus', 'Senior Associate', 92000),
(8, 'Kalpana', 'Kumar', 'Manager', 86000),
(9, 'Peter', 'Ashley', 'Associate', 73000),
(10, 'Joanna', 'White', 'Senior Associate', 54000),
(11, 'Drake', 'Valley', 'Senior Associate', 54000);
-- 下面是我们的employees表的样子
SELECT *
FROM employees;

图片employees表

  • 让我们根据员工的薪资从高到低排列,并为薪资相同的行分配相同的排名。
SELECT * , DENSE_RANK() OVER(ORDER BY salary DESC) AS employee_rank
FROM employees;

图片

  • 让我们根据员工的薪资按从低到高排列,并为薪资相同的行分配相同的排名。
SELECT * , DENSE_RANK() OVER(ORDER BY salary) AS employee_rank
FROM employees;

图片

  • 让我们根据员工的薪资从高到低排序,并为薪资相同的行分配相同的排名。然后根据“职位(position)”列将结果集分成若干分区。
SELECT * , DENSE_RANK() OVER(PARTITION BY position ORDER BY salary DESC) AS employee_rank
FROM employees;

图片

2.2 将具有相同排名的项目分组

当你想要将具有相同排名的项目分组在一起时,DENSE_RANK()非常有用。

  • 假设我们有一个名为“titles(标题)”的表,其中包含“title(标题)”和“price(价格)”列。假设我们希望按价格对书籍标题进行排序,并将具有相同销售价格的书籍标题分组:
SELECT title, price, DENSE_RANK() OVER(ORDER BY price DESC) as 'rank'
FROM titles;

图片

  • 让我们根据“type(类型)”列将结果集分成几个分区。
SELECT title, price, type, DENSE_RANK() OVER(PARTITION BY type ORDER BY price DESC) as 'rank'
FROM titles;

图片

2.3 识别最佳表现者

  • 假设我们有一个名为“titles(标题)”的表,其中包含“title(标题)”和“ytd_sales”列。为了识别表现最佳的图书,我们可以使用以下查询:
SELECT title, ytd_sales, DENSE_RANK() OVER(ORDER BY ytd_sales DESC) as 'rank'
FROM titles;

图片

  • 让我们根据“type(类型)”列将结果集分成几个分区。
SELECT title, ytd_sales, type, DENSE_RANK() OVER(PARTITION BY type ORDER BY ytd_sales DESC) as 'rank'
FROM titles;

图片

三、结论

SQL中的DENSE_RANK()窗口函数功能非常强大,可在考虑相同值的情况下在结果集中进行排序和分组。无论是需要创建排名、将具有相同值的项目进行分组,还是需要识别表现最佳的项目,DENSE_RANK()都是首选函数。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值