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

Oracle开窗函数分类与统计应用

Oracle开窗函数分类统计

Oracle开窗函数(Window Functions)是SQL中强大的分析工具,允许在不减少行数的情况下进行计算和聚合。以下是Oracle开窗函数的主要分类和统计应用:

一、基本分类

  1. 聚合类开窗函数

    • SUM() OVER()
    • AVG() OVER()
    • COUNT() OVER()
    • MAX() OVER()
    • MIN() OVER()
  2. 排名类开窗函数

    • ROW_NUMBER() OVER()
    • RANK() OVER()
    • DENSE_RANK() OVER()
    • NTILE(n) OVER()
  3. 分析类开窗函数

    • FIRST_VALUE() OVER()
    • LAST_VALUE() OVER()
    • LAG() OVER()
    • LEAD() OVER()

二、常用统计场景

1. 累计统计

-- 计算销售额累计和
SELECT order_date,sales_amount,SUM(sales_amount) OVER(ORDER BY order_date) AS running_total
FROM sales;

2. 分组排名

-- 按部门分组计算员工薪水排名
SELECT employee_id,department_id,salary,RANK() OVER(PARTITION BY department_id ORDER BY salary DESC) AS dept_salary_rank
FROM employees;

3. 移动平均

-- 计算3个月的移动平均销售额
SELECT month,sales,AVG(sales) OVER(ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS moving_avg
FROM monthly_sales;

4. 前后值比较

-- 比较当前行与前一行的值
SELECT date,temperature,LAG(temperature, 1) OVER(ORDER BY date) AS prev_day_temp,temperature - LAG(temperature, 1) OVER(ORDER BY date) AS temp_diff
FROM weather_data;

三、高级用法

  1. 多级分区
SELECT product_id,region,quarter,sales,SUM(sales) OVER(PARTITION BY region, quarter) AS region_quarter_sales
FROM product_sales;
  1. 百分比计算
SELECT student_id,test_score,test_score / SUM(test_score) OVER() * 100 AS percent_of_total
FROM test_results;
  1. 首尾值分析
SELECT department_id,employee_id,hire_date,FIRST_VALUE(employee_id) OVER(PARTITION BY department_id ORDER BY hire_date) AS first_hire
FROM employees;

四、性能考虑

  1. 开窗函数通常在WHERE和GROUP BY之后执行
  2. 合理使用PARTITION BY可以减少计算量
  3. 对于大数据集,考虑使用RANGE而非ROWS可能更高效

Oracle开窗函数提供了强大的数据分析能力,能够在不改变结果集行数的情况下实现复杂的统计计算。

http://www.dtcms.com/a/317469.html

相关文章:

  • miniExcel一个对象加一个对象列表导出
  • 《Vue 3与Element Plus构建多语后台的深层架构》
  • 第一章-网络信息安全概述
  • 软考信息安全工程师11月备考
  • ZeroNews三步部署,安全远程访问教育内网
  • [激光原理与应用-165]:光机械件 - 影响系统性能指标的关键因素和敏感因素
  • 如何给小语种视频生成字幕?我的实测方法分享
  • VINS-Fusion+UWB辅助算法高精度实现
  • 【计算机网络 | 第3篇】物理媒介
  • Git 分支迁移完整指南(结合分支图分析)
  • 微软的BitLocker加密
  • 华为云 Flexus 部署 coze-studio
  • 第五十篇:AI画家的“神经中枢”:ComfyUI的推理路径与缓存逻辑深度解析
  • PostgreSQL 高可用与负载均衡
  • iOS 文件管理实战指南 查看 App 数据与系统日志的完整方法
  • 26-OS-PV大题
  • 重生之我在暑假学习微服务第十一天《配置篇》+网关篇错误订正
  • 启动VScode调试时报错:go命令的版本是1.23.0,而工具链的版本是1.23.6
  • IDEA 2025下载安装教程【超详细】保姆级图文教程(附安装包)
  • 华硕携多款明星电竞显示器亮相 ChinaJoy2025,联袂 TCL 华星打造沉浸体验
  • [Oracle] SIGN()函数
  • 微信小程序最大层级跳转问题
  • 使用 Maxwell 和 RabbitMQ 监控 Mysql Flowable 表变更
  • Kubernetes(k8s)之容忍与污点
  • Java学习第一百零九部分——Jenkins(一)
  • k8s +cilium+metallb 集群流量走向
  • 嵌入式学习的第四十四天-ARM
  • Gitlab+Jenkins+K8S+Registry 建立 CI/CD 流水线
  • Packets Frames 数据包和帧
  • docker-compose快速部署启动file beat+ELK