SQL_over_partition_by_order_by

在SQL中,OVER子句通常与窗口函数一起使用,用于定义窗口的规则。PARTITION BY用于将数据分成多个独立的分区,而ORDER BY用于在每个分区内定义数据的排序方式。

窗口函数可以对一组行执行计算,并返回计算结果。这些行与当前行有某种关系,这种关系由OVER子句定义。

基本语法

SELECT column_name,

window_function() OVER (PARTITION BY partition_column ORDER BY order_column)

FROM table_name;

• column_name: 你想要查询的列名。

• window_function: 窗口函数,如SUM(), AVG(), COUNT(), MIN(), MAX(), ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG()等。

• PARTITION BY partition_column: 指定用于分区的列。分区内的行将根据这个列的值进行分组。

• ORDER BY order_column: 指定用于排序的列。在每个分区内,行将根据这个列的值进行排序。

示例

假设我们有一个名为sales的表,包含以下列:id, date, salesperson_id, amount。我们想要计算每个销售人员的总销售额,并且想要知道每个销售人员在每个季度的销售额排名。

sql 复制代码
SELECT salesperson_id,
       date,
       amount,
       SUM(amount) OVER (PARTITION BY salesperson_id) AS total_sales,
       RANK() OVER (PARTITION BY salesperson_id, YEAR(date) ORDER BY amount DESC) AS sales_rank
FROM sales;

在这个例子中:

• SUM(amount) OVER (PARTITION BY salesperson_id): 计算每个销售人员的总销售额。

• RANK() OVER (PARTITION BY salesperson_id, YEAR(date) ORDER BY amount DESC): 计算每个销售人员在每个季度的销售额排名。

注意事项

  1. 窗口函数:窗口函数不会从结果集中消除重复的行,即使它们在计算中使用了相同的行。
  2. 窗口定义:OVER子句定义了窗口的规则,包括分区和排序。
  3. 窗口帧:除了PARTITION BY和ORDER BY,还可以使用ROWS或RANGE子句来定义窗口的帧,这允许你限制窗口函数操作的行数。
相关推荐
咔叽布吉33 分钟前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny23334 分钟前
《大模型应用开发极简入门》笔记
笔记·chatgpt
亦枫Leonlew36 分钟前
微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
笔记·数学·微积分·1024程序员节
小肥象不是小飞象39 分钟前
(六千字心得笔记)零基础C语言入门第八课——函数(上)
c语言·开发语言·笔记·1024程序员节
星LZX41 分钟前
WireShark入门学习笔记
笔记·学习·wireshark
瓜牛_gn2 小时前
mysql特性
数据库·mysql
努力变厉害的小超超3 小时前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
数新网络4 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
师太,答应老衲吧6 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml47 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍