返回顶部
首页 > 资讯 > 数据库 >[分析函数] over partition by
  • 484
分享到

[分析函数] over partition by

2024-04-02 19:04:59 484人浏览 独家记忆
摘要

1. over partition by 和 group by的区别 - over partition by 可以将汇总数据和源数据在一行中显示 例如: 查询每个员工的薪资和部门最高薪资

1. over partition by 和 group by的区别

- over partition by 可以将汇总数据和源数据在一行中显示

例如: 查询每个员工的薪资和部门最高薪资

- group by 只能显示分组数据和聚集结果


2. rank()/dense_rank() over(partition by ...order by ...)

--查询每个部门工资最高的雇员的信息
select * from (select emp.*,rank() over(partition by deptno order by sal desc) maxsalno from emp) where maxsalno=1


3. min()/max() over(partition by ...)

--查询每位雇员信息的同时算出雇员工资与所属部门最高/最低员工工资的差额
select a.*,sal-maxsal diff from (select emp.*,max(sal) over(partition by deptno) maxsal from emp) aEMPNO ENAME                    DEPTNO        SAL       DIFF
---------- -------------------- ---------- ---------- ----------
      7782 CLARK                        10       2450      -2550
      7839 KING                         10       5000          0
      7934 MILLER                       10       1300      -3700
      7566 JONES                        20       2975        -25
      7902 FORD                         20       3000          0
      7876 ADAMS                        20       1100      -1900
      7369 SMITH                        20        800      -2200
      7788 SCOTT                        20       3000          0
      7521 WARD                         30       1250      -1600
      7844 TURNER                       30       1500      -1350
      7499 ALLEN                        30       1600      -1250

     EMPNO ENAME                    DEPTNO        SAL       DIFF
---------- -------------------- ---------- ---------- ----------
      7900 JAMES                        30        950      -1900
      7698 BLAKE                        30       2850          0
      7654 MARTIN                       30       1250      -1600

14 rows selected.


select a.empno,a.ename,a.deptno,a.sal,maxsal,sal-maxsal diff from (select emp.*,max(sal) over(partition by deptno order by sal) maxsal from emp) a

     EMPNO ENAME                    DEPTNO        SAL     MAXSAL       DIFF
---------- -------------------- ---------- ---------- ---------- ----------
      7934 MILLER                       10       1300       1300          0
      7782 CLARK                        10       2450       2450          0
      7839 KING                         10       5000       5000          0
      7369 SMITH                        20        800        800          0
      7876 ADAMS                        20       1100       1100          0
      7566 JONES                        20       2975       2975          0
      7788 SCOTT                        20       3000       3000          0
      7902 FORD                         20       3000       3000          0
      7900 JAMES                        30        950        950          0
      7654 MARTIN                       30       1250       1250          0
      7521 WARD                         30       1250       1250          0

     EMPNO ENAME                    DEPTNO        SAL     MAXSAL       DIFF
---------- -------------------- ---------- ---------- ---------- ----------
      7844 TURNER                       30       1500       1500          0
      7499 ALLEN                        30       1600       1600          0
      7698 BLAKE                        30       2850       2850          0

14 rows selected.


*order by的作用

表示当前行中所在分组中相同排序序号的(max最大值)

select a.empno,a.ename,a.deptno,a.sal,sum(sal) over(partition by deptno order by sal) maxsal from emp a where deptno=20;

     EMPNO ENAME                    DEPTNO        SAL     MAXSAL
---------- -------------------- ---------- ---------- ----------
      7369 SMITH                        20        800        800
      7876 ADAMS                        20       1100       1900
      7566 JONES                        20       2975       4875
      7902 FORD                         20       3000      10875      顺序号相同4  3000+3000+4875=10875
      7788 SCOTT                        20       3000      10875     顺序号相同4

* 有排序,当前行在分组内相同顺序号的行 进行求和


(4).lead()/lag() over(partition by ... order by ...)

-- 计算个人工资与比自己高一位/低一位工资的差额
select EMP.*,sal-lead(SAL,1,sal) over(partition by deptno order by sal) after,sal-lag(sal,1,sal) over(partition by deptno order by sal) before from EMP;select a.empno,a.ename,a.deptno,a.sal,sal-lead(SAL,1,sal) over(partition by deptno order by sal) after,sal-lag(sal,1,sal) over(partition by deptno order by sal) before from EMP;

EMPNO ENAME                    DEPTNO        SAL      AFTER     BEFORE
---------- -------------------- ---------- ---------- ---------- ----------
      7934 MILLER                       10       1300      -1150          0
      7782 CLARK                        10       2450      -2550       1150
      7839 KING                         10       5000          0       2550
      7369 SMITH                        20        800       -300          0
      7876 ADAMS                        20       1100      -1875        300
      7566 JONES                        20       2975        -25       1875
      7788 SCOTT                        20       3000          0         25
      7902 FORD                         20       3000          0          0
      7900 JAMES                        30        950       -300          0
      7654 MARTIN                       30       1250          0        300
      7521 WARD                         30       1250       -250          0

     EMPNO ENAME                    DEPTNO        SAL      AFTER     BEFORE
---------- -------------------- ---------- ---------- ---------- ----------
      7844 TURNER                       30       1500       -100        250
      7499 ALLEN                        30       1600      -1250        100
      7698 BLAKE                        30       2850          0       1250

14 rows selected.


* lead(a,b,c)  表示当前行列a的下b行的值,如果没有则去值为c

   lag(a,b,c)  表示当前行列a的上b行的值,如果没有则去值为c


您可能感兴趣的文档:

--结束END--

本文标题: [分析函数] over partition by

本文链接: https://lsjlt.com/news/45087.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [分析函数] over partition by
    1. over partition by 和 group by的区别 - over partition by 可以将汇总数据和源数据在一行中显示 例如: 查询每个员工的薪资和部门最高薪资 ...
    99+
    2024-04-02
  • Oracle分析函数Over()
    Over()分析函数   说明:聚合函数(如sum()、max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录。若想对于某组返回多行记录,则需要使用分析函数。 rank()/dense_rank over...
    99+
    2015-01-23
    Oracle分析函数Over()
  • Oracle高级查询之OVER (PARTITION BY ..)
    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的。注:标题中的红色order by是说明在使用该方法的时候必须要带上order by。一、rank()/de...
    99+
    2024-04-02
  • MySQL5.7 实现类似 MySQL8.0 中 row_number() over(partition by ... order by ...) 函数的分组排序编号效果
    示例 现在这里有一张用户表 user,里面包含以下字段:ID 主键、USERNAME 用户名、PASSWORD 密码、COMPANY 公司、DEPT 部门、CREATE_TIME 创建时间。 IDUS...
    99+
    2023-09-24
    数据库 sql mysql
  • SQL中row_number() over(partition by)的用法说明
    目录row_number 语法原始表scorerow_number() over(partition by 列名1 order by 列名2 desc)的使用 分页row_...
    99+
    2024-04-02
  • 窗口函数OVER(PARTITION BY)详细用法——语法+函数+开窗范围ROWS和RANGE
    目录 一、函数写法 二、开窗的窗口范围ROWS与RANGE 1.范围限定用法 2.ROWS和RANGE的区别 (1) ROWS按行数限定 (2) RANGE按数据范围限定         order by 数字               ...
    99+
    2023-09-02
    数据库 mysql sql
  • MySQL窗口函数 PARTITION BY()函数介绍
    前期数据准备 # 创建数据库create database if not exists shopping charset utf8;# 选择数据库use shopping;# 创建产品表create ...
    99+
    2023-09-12
    mysql sql 数据库
  • Oracle分析函数之开窗函数over()详解
    分析函数是什么? 分析函数是Oracle专门用于 解决复杂报表统计需求 的功能强大的函数, 它可以在数据中进行分组然后计算基于组的某种统计值 ,并且每一组的每一行都可以返回一个统计值。 ...
    99+
    2024-04-02
  • SQLServer中Partition By及row_number函数的使用
    这篇文章运用简单易懂的例子给大家介绍SQLServer中Partition By及row_number函数的使用,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。partition &nb...
    99+
    2024-04-02
  • Oracle中分析函数over()的用法及说明
    目录1 over()分析函数1.1 rank()/dense_rank()1.2 min()/max()1.3 lead()/lag()1.4 FIRST_VALUE/LAST_VALUE()1.5 ROW_NUMBER...
    99+
    2023-02-28
    Oracle分析函数 Oracle over() Oracle分析函数用法
  • 数据库中PARTITION BY分组怎么用
    小编给大家分享一下数据库中PARTITION BY分组怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我在自己的SCHEMA...
    99+
    2024-04-02
  • SQLServer中如何使用Partition By和row_number 函数
    这期内容当中小编将会给大家带来有关SQLServer中如何使用Partition By和row_number 函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先呢我把...
    99+
    2024-04-02
  • Mysql似oracle分析函数sum over的实现方法是什么
    这篇文章主要介绍“Mysql似oracle分析函数sum over的实现方法是什么”,在日常操作中,相信很多人在Mysql似oracle分析函数sum over的实现方法是什么问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • Exchange Partition的示例分析
    今天就跟大家聊聊有关Exchange Partition的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Exc...
    99+
    2024-04-02
  • 分析函数
    --row_numberSELECT ename,       deptno,       rownum, ...
    99+
    2024-04-02
  • Sql Server中如何使用Over()函数
    今天就跟大家聊聊有关Sql Server中如何使用Over()函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。利用over(),将统计信息计算出来...
    99+
    2024-04-02
  • MYSQL row_number()与over()函数用法详解
    语法格式:row_number() over(partition by 分组列 order by 排序列 desc) row_number() over()分组排序功能: ...
    99+
    2024-04-02
  • Oracle中的over()函数怎么使用
    今天小编给大家分享一下Oracle中的over()函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 over()...
    99+
    2023-07-05
  • sql over函数的用法是什么
    在SQL中,OVER函数用于计算窗口函数的结果。窗口函数是一类函数,用于在查询结果的某个窗口或分组上执行计算操作。OVER函数可以配...
    99+
    2024-04-09
    sql
  • sql over函数的作用是什么
    SQL OVER函数是一种窗口函数,用于在查询结果中计算聚合函数的值。它可以在查询结果中的每一行上执行聚合函数,并将结果返回到结果集...
    99+
    2024-04-09
    sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作