首页 > 数据库 >MySQL开窗函数

MySQL开窗函数

时间:2023-05-13 20:11:20浏览次数:51  
标签:salary insert 函数 into rank values 开窗 MySQL employee

MySQL开窗函数

知识点

三种开窗函数:row_number(),rank(),dense_rank() 这三种函数都是用于返回结果集的分组内每行的排名
区别:
    row_number():特点是唯一且连续,如果四个人是按成绩排名,那么是1234这样排的,即使有重分的人
	rank(): 特点是并列不连续,如果四个人是按成绩排名,那么是1224这样排的,重分的人是同一个排名,且占一个排名的位置,排名不连续
	dense_rank():特点是并列且连续,如果四个人是按成绩排名,那么是1223这样排的,重分的人是同一个排名,共占一个排名,排名连续

示例

# 三种排序函数: row_number() rank()  dense_rank()
# 数据准备
create table employee (
empid int,ename varchar(20) ,deptid varchar(10) ,salary decimal(10,2)
);

insert into employee values(1,'刘备','蜀',5500.00);
insert into employee values(2,'赵云','蜀',4500.00);
insert into employee values(3,'张飞','蜀',3500.00);
insert into employee values(4,'关羽','蜀',4500.00);

insert into employee values(5,'曹操','魏',1900.00);
insert into employee values(6,'许褚','魏',4800.00);
insert into employee values(7,'张辽','魏',6500.00);
insert into employee values(8,'徐晃','魏',14500.00);

insert into employee values(9,'孙权','吴',44500.00);
insert into employee values(10,'周瑜','吴',6500.00);
insert into employee values(11,'陆逊','吴',7500.00);


# 需求一: 使用三种排序函数对employee表中员工按照薪资进行降序排名:
select *,row_number() over (order by salary desc) as rank1,rank() over (order by salary desc)as rank2,dense_rank() over (order by salary desc)as rank3 from employee;

# 需求二: 对employee表中按照deptid进行分组,并对每一组的员工按照薪资进行降序排名:
select *,row_number() over (partition by deptid order by salary desc) as rank1,rank() over (partition by deptid order by salary desc)as rank2,dense_rank() over (partition by deptid order by salary desc)as rank3 from employee;

#开窗函数经常用于解决TOP N问题

标签:salary,insert,函数,into,rank,values,开窗,MySQL,employee
From: https://www.cnblogs.com/lionet-kk/p/mysql04.html

相关文章

  • MySQL-简单总结
    部分概念:1、在数据库中产生数据不一致的根本原因是冗余2、一个事务对某数据加S锁后,其它的事务不能对该数据加任何类型的锁(错误):所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁3、一个数据库只有一个模式和一个内模式4、使某个事务......
  • 推导式,三元运算符,匿名函数(lambda)
    set集合只有key的字典{}set中的元素必须是可hash的,也是不可变的元素是无序,不重复的set()转为集合,可以用来去重增.add()添加.update()迭代更新删.remove()删,返回值是none.clear()清空,空集合是set()改先删再加查for循环集合的交......
  • 内置函数
    内建函数3.6内建函数(itprojects.cn)local()本地的变量globals()全局的变量eval()把字符串组成的代码当作Python代码来执行并返回值,字符串转字典exec()和eval差不多,但是没有返回值callable()检测对象是否可以被调用-------------反射dir()查看一个数据可以调用哪些方法......
  • 递归函数
    自己调用自己官方最大递归深度1000次fromsysimportsetrecursionlimit导入sys模块中可以设置递归函数 ......
  • MySQL学习日志五,外键与DML语言
    外键准备一个表,gradeid作为外键CREATETABLE`grade`( `gradeid`INT(10)NOTNULLAUTO_INCREMENTCOMMENT'年级id', `gradename`VARCHAR(50)NOTNULLCOMMENT'年级名称', PRIMARYKEY(`gradeid`))ENGINE=INNODBDEFAULTCHARSET=utf8创建生成的表方法一:在......
  • Window环境下Java备份和恢复Mysql数据
    ***java执行代码中必须加cmd/cProcessexec=Runtime.getRuntime().exec("cmd/cmysqldump-uroot-p123456xxl_job>e:/home/jobbak.sql");Processexec1=Runtime.getRuntime().exec("pingwww.baidu.com");BufferedReaderbufferedReader=newBuf......
  • Mysql union和union all用法
    我们经常会碰到这样的应用,两个表的数据按照一定的查询条件查询出来以后,需要将结果合并到一起显示出来,这个时候就需要用到union和unionall关键字来实现这样的功能,union和unionall的主要区别是unionall是把结果集直接合并在一起,而union是将unionall后的结果镜像一次distinct,去除......
  • 三菱FX3U模拟量FB函数块,使用结构化工程编写,FB块全部用ST语言编写,支持重复调用。
    三菱FX3U模拟量FB函数块,使用结构化工程编写,FB块全部用ST语言编写,支持重复调用。现在测试FX3U4DAFB块与数学量转工程量FB块,已正常没有问题。没有全部实物,其他功能块没有测试,有实物的朋友拿去测试!全部FB块如下:第一,FX2N-2DA模拟量输出FB函数块,第二,FX2N-2AD模拟量输入FB函数块,第三,FX......
  • mysql用户表root用户被锁定,无法登陆(Account is locked)
    今天看到mysql的user表就打开了看看,看到root还有些权限是N,然后顺手就改成了Y,结果保存之后就凉凉了,数据库就打不开了,报“Accountislocked”这个错误,上网排查了好半天才解决,解决方法记录一下。解决思路:1、使用skip-grant-tables跳过密码验证,此时可以打开MySQL服务并登录2、......
  • MySql的数据存储之B+树(浅谈)
    一.MySql的实际存储位置B+树是MySql数据结构的主流存储方式,包括InnoDB和MYISAM引擎,它们的默认存储结构都是B+树了解B+树前,我们先要知道MySql的实际存储位置在哪?有人会说它存在我么的D盘或C盘的MySql文件夹的Data目录里,这个回答没错,我们在深入的了解一下呢?不管是在个人电脑上......