mysql中还有窗口函数?这是什么东西?
什么是窗口函数?
在mysql8.0
的版本中,新增了一个窗口函数,用他可以实现很多新的查询方式。窗口函数类似于sun()
、count()
那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行中。什么意思呢?就是说窗口函数是不需要group by
的。
窗口函数-排名
首先我们创建一个名字为test_2
的数据表;
mysql> create table test_2 (name char(200) not null, brcount int(20) not null);
Query OK, 0 rows affected, 1 warning (0.02 sec)mysql>
然后插入几条数据;
mysql> insert into test_2 values ('test1', 10), ('test2', 14), ('test3', 8), ('test4', 99), ('test5', 3);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0mysql>
查看下表中数据:
mysql> select * from test_2;
+-------+---------+
| name | brcount |
+-------+---------+
| test1 | 10 |
| test2 | 14 |
| test3 | 8 |
| test4 | 99 |
| test5 | 3 |
+-------+---------+
5 rows in set (0.00 sec)mysql>
按照字段brcount
从小到大来进行排序,可以利用窗口函数来实现;
mysql> select *, rank() over w1 as 'rand' from test_2 window w1 as (order by brcount);
+-------+---------+------+
| name | brcount | rand |
+-------+---------+------+
| test5 | 3 | 1 |
| test3 | 8 | 2 |
| test1 | 10 | 3 |
| test2 | 14 | 4 |
| test4 | 99 | 5 |
+-------+---------+------+
5 rows in set (0.01 sec)mysql>
这里创建了名称为w1
的窗口函数,规定对brcount
字段进行排序,然后在select
子句中对窗口函数w1
执行rank()
方法,将结果输出为rank
字段。
RANK()
函数为结果集的分区中的每一行分配一个排名。行的等级由一加上前面的等级数指定。
需要注意的是,在这里的windows w1
是可选的,如下:
mysql> select *, rank() over w1 as 'rand' from test_2 window w1 as (order by brcount);
+-------+---------+------+
| name | brcount | rand |
+-------+---------+------+
| test5 | 3 | 1 |
| test3 | 8 | 2 |
| test1 | 10 | 3 |
| test2 | 14 | 4 |
| test4 | 99 | 5 |
+-------+---------+------+
5 rows in set (0.00 sec)mysql>
亦或者查一下各自所占百分比;
mysql> select *, (brcount)/(sum(brcount) over()) as rate from test_2;
+-------+---------+--------+
| name | brcount | rate |
+-------+---------+--------+
| test1 | 10 | 0.0746 |
| test2 | 14 | 0.1045 |
| test3 | 8 | 0.0597 |
| test4 | 99 | 0.7388 |
| test5 | 3 | 0.0224 |
+-------+---------+--------+
5 rows in set (0.00 sec)mysql>
至此,本文结束。
更多内容请转至VX公众号 “运维家” ,获取最新文章。
------ “运维家” ------
------ “运维家” ------
------ “运维家” ------
临武县运维工程师培训,温州运维工程师,通达oa实施运维工程师,呼叫中心运维工程师面试
腾讯idc运 维工程师面试,运维工程师samba,运维工程师的行业是什么,
运维工程师的来历,运维工程师好找嘛,运维 工程师出入,运维工程师自学可行
mysql中还有窗口函数?这是什么东西?相关推荐
- MySQL中的uuid函数是什么东西
MySQL的uuid这个函数.简要介绍一下. 用法 简单看到,这个值,每次执行都是不同的. 生成规则 第1 2 3 段是与时间有关的. time_low.time_mid.time_high_and_ ...
- mysql over rank_sql - MySQL中的Rank函数
sql - MySQL中的Rank函数 我需要找出客户的排名. 在这里,我为我的要求添加了相应的ANSI标准SQL查询. 请帮我转换为MySQL. SELECT RANK() OVER (PARTIT ...
- MySQL中的sum函数用法实例详解
今天分享一下mysql中的sum函数使用.该函数已经成为大家操作mysql数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几 ...
- MySql中管理百万级要注意些什么东西(转载)
一.我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应 用编程接口(API) 应用程序 二.优化硬件 如果你需要庞大的数据库表 (>2G),你应该考虑使用64位的硬 ...
- mysql中的float_mysql里float是什么东西
展开全部 今天做实验,本来以前都已经做得差不多了的,可突然U盘一下子坏掉,计算机无法识62616964757a686964616fe78988e69d8331333335336537别,驱动重装没用, ...
- sql查询三级菜单分类_SQL面试50题——思路解答与分类整理(中)窗口函数与子查询...
让我们每天都进步一点点 题目快速查找索引 阅读指南 上篇:SQL面试50题--思路解答与分类整理(上)聚合函数与表连接 [第一部分]聚合函数(sum/avg/count/min/max) [第二部分] ...
- mysql中的%_mysql入门
MySQL 数据库 1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: 可存储大量数据: 方便检索: 保持数据的一致性.完整性: 安全,可共享: ...
- 求求你,别在 MySQL 中使用 UTF-8了!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/qq_39390545/ ...
- 为什么不建议在 MySQL 中使用 UTF-8?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 _陈哈哈|https://sourl.cn/kKbzpH 记得去年 ...
最新文章
- 深度学习:Opencv的BlobfromImage如何工作
- java中磁盘和内存的相互,Java:有没有磁盘和内存一样快的情况?
- python标准类型内建模块_Python内建模块struct实例详解
- PhotoShop更改图片背景色
- [数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构
- php 输出01,php基础01_thinkphp输出Hello World-Go语言中文社区
- 关于 QImage::Format_Mono
- 三维点云学习(4)5-DBSCNA python 复现-3-kd-tree radius NN 三方库 scipy 与 sklearn速度比较
- python 柱状图设置样式_python数据可视化之图表样式调整(三)
- 定时器开始时延时了十几秒_第六章--系统滴答定时器
- 小米路由器4a刷第三方固件_小米路由器4A的断网问题初探
- vue 创建图片坐标点_Vue Echarts 显示地图且根据坐标设置标注点
- Servlet是什么?有什么用?
- 大学物理复习5-角动量定理+角动量守恒定律
- 微信小程序:2022虎年全新头像框制作
- 揭晓网站建设对于企业发展的重要作用
- 业务流程规范的战争兴起:XPDL、BPEL、BPDM
- 机器学习数据集划分留出法,留一法,交叉法,自助法
- php rsa 模数 指数,密码:使用模数和指数生成RSA私钥
- 三种迭代法解方程组(雅可比Jacobi、高斯-赛德尔Gaisi_saideer、逐次超松弛SOR)