sql——窗口范围之partition by 与 order by

partition by 关键字

partition by 在开窗函数中,常用于表示某个分区,规则了数据的范围

order by 关键字

order by 常用于对分区内的数据进行排序,常见的情况下,order by还能规定sql语句的影响范围。

rows between unbounded preceding and current rows

表示受影响范围为从第一行到当前行

若没有rows ... between语句,表示从第一行至最后一行

max() 函数

在max() over()函数中,表示取一个分区内的最大值,与聚合max()不同,

开窗函数的max()将会产生多行结果,并且受到partition by 与 order by 影响

例如,求查询所有选修"英语"的学生成绩与最高分的分数差距,按成绩降序排序

可以按照如下做法

1.对分数进行开窗
max(score) over() max_score

 max受窗口函数的分区关键字 partition by 与order by影响,每行的最大值可能会有所不同,去掉关键字后,全局一致。

2.求分数差值,并排序
3.最终sql
select
    cid,
    sid,
    score,
    max_score - score as score_diff
from
(
select
    cid,
    sid,
    score,
    max(score) over() max_score
from SC sc 
join Course c
on sc.cid = c.cid
where c.cname = '英语'
)t1
order by score
数据展示

1.在用户商品订单最近一日汇总表中,按照用户id排序,求当前最大的订单下单总金额

select
    user_id,
    sku_id,
    order_total_amount_1d,
    max(order_total_amount_1d) over(order by user_id rows between unbounded preceding and current row ) max_price
from user_sku__1d

受rows between影响, 最大价格max_price 取决于所在行数。

sql——窗口范围之partition by 与 order by_第1张图片

这里就体现了order by的行数影响,影响的是全局还是到当前行。

你可能感兴趣的:(sql摘要,大数据,sql)