SQL-DAY 8(SQL窗口函数的应用案例:电商平台订单信息案例分析)

文章目录

  • 一、窗口函数说明
    • 1.窗口函数的语句结构
    • 2.窗口函数的分类
  • 二、案例分析(电商平台订单信息)
    • 1.数据准备
    • 2.窗口函数之累计计算函数
    • 3.窗口函数之排序函数
    • 3.窗口函数之偏移分析函数


一、窗口函数说明

1.窗口函数的语句结构

  • 窗口函数的语法格式
函数名 ([expr]) over(子句)

函数名 ([expr]) over( partition by <要分列的组> order by <要排序的列> rows between <数据范围>)

其中over关键字后子句包含三个分析子句
 分组子句partition by
 排序子句order by
 窗口子句rows

sum A over (partition by B order by C rows between D1 and D2)
avg A over(partition by B order by C rows between D1 and D2)
  • rows子句的相关示例
rows between 2 preceding and current row # 取当前行和前面两行

rows between unbounded preceding and current row # 包括本行和之前所有的行

rows between current row and unbounded following # 包括本行和之后所有的行

rows between 3 preceding and 1 following # 取前面三行和下面一行,包含当前行,总共五行

注意:
  当order by后面缺少窗口从句条件,窗口规范默认是rows between unbounded preceding and current row.
  当order by和窗口从句都缺失, 窗口规范默认是 rows between unbounded preceding and unbounded following

2.窗口函数的分类

  • 窗口函数分为两种
专用窗口函数 聚合类窗口函数
rank() 并列排名会跳号 sum()
dense_rank() 并列排名不会跳号 count()
row_number() 生成行的编号 avg()
max()
min()

二、案例分析(电商平台订单信息)

1.数据准备

表结构

列名 释义
user_name 用户名
piece 购买数量
price 价格
pay_amount 支付金额
goods_category 商品品类
pay_time 支付日期

建表语句

use lagou;
create table user_trade (
	user_name varchar(20),
	piece int,
	price double,
	pay_amount double,
	goods_category varchar(20),
	pay_time date
);

2.窗口函数之累计计算函数

需求1: 查询出2019年每月的支付总额和当年累积支付总额

-- step1 过滤出2019年数据
select * from user_trade where year(pay_time)=2019;

-- step2 在1的基础上,按照月份进行group by 分组,统计每个月份的支付总额
select month(pay_time

你可能感兴趣的:(SQL,sql,数据库,database)