Oracle SQL

  • order by
    排序, desc降序,asc升序

  • 日期
日期可以直接+1

  • rank,dense_rank,row_number
名称 区别
rank 排序的方式是前边有多少人就是多少名,按照实体排名
dense_rank 稠密的排序方式,只考虑去重后的成绩排名
row_number 就是行号,可以用于分页

  • group by 与partition by
名称 区别
group by 分组后的数据只能计算出组内一个统计数据,而不能保存组内的每一条数据,比如计算平均值,总值,最大值,最小值
partition by 之后的数据依旧保存着每一条数据。他的分组效果类似于将分组后的数据排列在一起

  • 去除重复
    按照重复列分组,取出每一个分组的一个唯一标识,然后删除所有不在这个列表里的行数据。
drop table where id not in  
(select min(id)  group by (repeat) from table)

//
(select first_value(id)  group by (repeat) from table)

  • over 窗口函数
名称 区别
lag lag(列名,n,default),前n个,over内必须有排序
lead lead(列名,n,default),后n个, over内必须有排序
FIRST_VALUE 可以是分组排序后的第一个值。
LAST_VALUE 可以是分组排序后的最后一个值。
NULLS FIRST null 放在第一个
NULLS LAST 放最后一个
NTILE(n) 将数据分成n份
//通过部门分组,通过salary排序,然后得到组内行号,重命名为rown
row_number()  over(PARTITION BY e.department_id ORDER BY e.salary)  rown
//排名
rank()  over(PARTITION BY e.department_id ORDER BY e.salary)  rown
//lag 升序排序后,比当前温度低的一个,温度对应的日期。
lag(date,1,null) over (order by temperature asc) as beforeDate
// 将null放在最后一个
RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL NULLS LAST)
//按分位数,最后通过分位数的字段名,筛选到自己想要的数据
//若只取前三分之一,all_cmp=1即可,若只取中间三分之一,all_cmp=2即可
NTILE(3) OVER(ORDER BY E.SAL DESC NULLS LAST) ALL_CMP
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分析函数,也称为窗口函数,通常被认为仅对数据仓库SQL有用。使用分析函数的查询,基于对数据行的分组来计算总量值。与...
    猫猫_tomluo阅读 3,398评论 3 18
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,539评论 0 13
  • Oracle SQL基本操作 Oracle数据库基本操作 1.概述 Oracle数据库客户端一般需要安装在服务器上...
    横竖撇捺啊阅读 566评论 0 1
  • 这一周主要学习了 Hive 的一些基础知识,学习了多个 Hive 窗口函数,虽然感觉这些窗口函数没有实际的应用...
    大石兄阅读 2,802评论 2 8
  • Oracle-SQL 这是对Oracle-SQL知识点详细介绍的文章系列,其他文章如下: Oracle-SQL系列...
    GuaKin_Huang阅读 2,325评论 1 7