网站首页 > 知识剖析 正文
接上一篇,这一篇主要介绍三类窗口函数,分布函数、前后函数和头尾函数。
【分布函数】
PERCENT_RANK基于RANK()函数的排序结果,percent_ranks列按照公式(rank-1) / (rows-1)带入rank值(row_num列)和rows值,其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数。
SELECT
id,
user_name,
date,
amount,
RANK() OVER w as ranks,
ROUND(PERCENT_RANK() OVER w,2) as percent_ranks
FROM
orders
WINDOW w AS (PARTITION BY user_name ORDER BY amount ASC)
CUME_DIST,分组内小于等于当前rank值的行数/分组内总行数,这个函数比percen_rank使用场景更多。可以用于计算大于等于或小于等于当前订单金额的订单比例有多少。
SELECT
id,
user_name,
date,
amount,
RANK() OVER w as ranks,
ROUND(PERCENT_RANK() OVER w,2) as percent_ranks,
ROUND(CUME_DIST() OVER w,2) as cume_dists
FROM
orders
WINDOW w AS (PARTITION BY user_name ORDER BY amount ASC)
【前后函数】
分区中位于当前行前n行(LAG)或后n行(LEAD)的记录值。这两个函数在实际中还是有使用场景,比如要查询上一个订单距离当前订单的时间间隔,或者本条订单距离下一条订单的时间间隔。
SELECT
id,
user_name,
date,
amount,
LAG(date,1) OVER w as 前一条订单时间,
LEAD(date,1) OVER w as 后一条订单时间
FROM
orders
WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)
如果要计算距离上一条订单的天数,只需要增加一列,用DATEDIFF函数把两个日期相减就可以了。如果是第一条订单,就会返回空值。
SELECT
id,
user_name,
date,
amount,
LAG(date,1) OVER w as 前一条订单时间,
DATEDIFF(date,LAG(date,1) OVER w) 距离上一天订单天数
FROM
orders
WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)
【头尾函数】
头尾函数FIRST_VAL和LAST_VAL函数,用来得到分区中的第一个或最后一个指定参数的值。可以用来查询每个用户第一次和最后一次的订单数据信息,然后就行比较操作。需要注意的是,最后一条订单时间是基于当前订单时间来看的,所有是等于当前订单时间。
SELECT
id,
user_name,
date,
amount,
first_value(date) OVER w as 第一条订单时间,
last_value(date) OVER w as 最后一条订单时间
FROM
orders
WINDOW w AS (PARTITION BY user_name ORDER BY date ASC)
End
猜你喜欢
- 2024-11-12 Linux运维面试sql语句2 面试linux运维工程师提问哪些问题
- 2024-11-12 PowerBI时间日期函数 powerbi日期相减
- 2024-11-12 数据库日期与时间函数概览 数据库时间日期型
- 2024-11-12 画像笔记7- 非实时标签-统计标签-最近来访标签
- 2024-11-12 扎心了!面试时遇到要手写sql,结果函数拼写不出来
- 2024-11-12 还不用Excel算算离国庆还有多少天?Get这11个神技每天省2小时!
- 2024-11-12 种猪生产数据预处理方法之数据清洗
- 2024-11-12 Mysql数据库常见函数(下)——日期时间函数
- 2024-11-12 MySQL常用函数之日期函数 mysql日期yyyymmdd
- 2024-11-12 MySQL常用函数,程序员真得看看 mysql常见函数
- 04-29php开发者composer使用看这一篇就够了
- 04-29引用和变量声明在不同语言中的实作
- 04-29PHP 没你想的那么差
- 04-29Ubuntu linux 上的 Nginx 和 Php 安装
- 04-29CentOS下通过yum搭建lnmp(单版本PHP)
- 04-29为什么 PHP8 是个高性能版本
- 04-29PHP8函数包含文件-PHP8知识详解
- 04-29使用无参数函数进行命令执行
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)