当前位置: 首页 > news >正文

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。我们想要计算每个销售人员的总销售额,并且想要知道每个销售人员在每个季度的销售额排名。

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子句来定义窗口的帧,这允许你限制窗口函数操作的行数。

相关文章:

  • Java数据库连接jdbc
  • 广东高校建设AIGC实验室时需要注意哪几个关键点?
  • [JavaEE] 网络编程----UDP / TCP 回显服务器
  • neo4j:ubuntu环境下的安装与使用
  • Spring Boot 点餐系统:餐饮界的技术革新
  • 【mac开发入坑指南】能让你的终端好用一万倍的神仙组合iTerm2 + oh-my-zsh
  • 【Rust练习】16.方法和关联函数
  • 解决远程连接AlpineLinux Mysql/MariaDB 无法连接的问题
  • Nginx反向代理配置支持websocket
  • 第18周 第1章Ajax基础知识
  • Axure原型系统:药企内部管理平台原型设计
  • Html--笔记01:使用软件vscode,简介Html5--基础骨架以及标题、段落、图片标签的使用
  • TypeScript 设计模式之【单例模式】
  • 数据备份策略:保障数据安全的关键
  • 从预测性维护到智能物流:ARM边缘计算控制器的工业实践
  • 【RocksDB】TransactionDB源码分析
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angular数据绑定机制
  • CAP 一致性协议及应用解析
  • CSS 提示工具(Tooltip)
  • Git 使用集
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JAVA 学习IO流
  • Javascript设计模式学习之Observer(观察者)模式
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • WebSocket使用
  • 多线程 start 和 run 方法到底有什么区别?
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 设计模式 开闭原则
  • 新书推荐|Windows黑客编程技术详解
  • 一道面试题引发的“血案”
  • Spring第一个helloWorld
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #1015 : KMP算法
  • $NOIp2018$劝退记
  • (1)Jupyter Notebook 下载及安装
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C#)一个最简单的链表类
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (离散数学)逻辑连接词
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Oracle存储过程编写经验和优化措施
  • (转)德国人的记事本
  • ****三次握手和四次挥手
  • .htaccess配置常用技巧
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET成年了,然后呢?
  • .net分布式压力测试工具(Beetle.DT)
  • .net解析传过来的xml_DOM4J解析XML文件
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • ?
  • @JSONField或@JsonProperty注解使用
  • [AHOI2009]中国象棋 DP,递推,组合数