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

高级sql技巧

以下是一些高级 SQL 技巧:

一、窗口函数

窗口函数可以在不影响数据分组的情况下,对数据进行排序、聚合等操作,非常强大。

  1. 排名函数
    • ROW_NUMBER():为每一行分配一个唯一的连续整数序号。
    • RANK():计算排序值,如果有相同的值会出现并列排名,并且下一个排名会跳过相应的数量。
    • DENSE_RANK():计算排序值,有相同的值会出现并列排名,但下一个排名不会跳过。

例如:

SELECT employee_id, salary,
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num,
       RANK() OVER (ORDER BY salary DESC) AS rank_num,
       DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank_num
FROM employees;
  1. 聚合函数作为窗口函数
    • 可以使用 SUM()AVG()COUNT() 等聚合函数在窗口中进行计算。

例如,计算每个员工的工资与部门平均工资的差值:

SELECT employee_id, department_id, salary,
       salary - AVG(salary) OVER (PARTITION BY department_id) AS salary_diff_from_dept_avg
FROM employees;


http://www.kler.cn/news/367804.html

相关文章:

  • 循序渐进丨openGauss / MogDB 数据库内存占用相关SQL
  • 银河麒麟相关
  • Mybatis中的参数占位符:${...} 、#{...}的区别
  • 开源实时数仓的构建
  • 在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比
  • 15分钟学 Go 小项目:Web API
  • 【利用Seaborn进行高级数据可视化】创建美观且信息丰富的图表!
  • Axios get请求数组参数移除默认的[]
  • Python 判断键是否存在字典中(新手入门、实战案例)
  • 【计网】从零开始认识IP协议 --- 理解网段划分,NAT策略,私有IP和公网IP,认识公网
  • HuggingFace应用——自然语言处理(1):什么是NLP?什么是Transformer?
  • 第23周Java主流框架入门-SpringMVC 3.拦截器
  • C++游戏开发中的多线程处理是否真的能够显著提高游戏性能?如果多个线程同时访问同一资源,会发生什么?如何避免数据竞争?|多线程|游戏开发|性能优化
  • 学习pytorch
  • Python RabbitMQ 消息队列监听
  • w001基于SpringBoot的在线拍卖系统
  • React Native 项目使用Expo模拟器运行iOS和Android
  • 【线下培训】龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座
  • android手动用证书签名apk apksigner工具
  • Unity3D学习FPS游戏(2)简单场景、玩家移动控制
  • gin入门教程(2):go安装以及初始目录构建
  • 简化深度学习实验管理:批量训练和自动记录方案
  • 暴力匹配算法 (BF):字符串匹配算法的演进之路
  • springboot 网上影院订票系统-计算机毕业设计源码06993
  • 小程序视频SDK解决方案,提供个性化开发和特效定制设计
  • 笔记整理—linux驱动开发部分(1)驱动梗概