文章目录

  • 1. 清楚sql的关键字顺序和执行顺序
  • 2. 在Hive命令行中可以对函数功能进行查看
  • 3. 窗口函数
    • 3.1 rank( ),dens_rank( ),row_number()
    • 3.2 sum( ),avg( )等
  • 4. 参考

今天对Hive–sql中的窗口函数及常用的一些内容做一个简单的总结。

1. 清楚sql的关键字顺序和执行顺序

关键字顺序

select … from … where … group by … having … order by … limit …

执行顺序

from where group by having select order by limit

group by 的底层是distinct

在使用group by时需要注意:select出来的必须列在groupby中,或者聚合函数中

2. 在Hive命令行中可以对函数功能进行查看

show  functions;     //查看自带的所有的内置函数desc function upper;  //查看具体的某个函数的用法desc function extended upper; //带有具体案例

3. 窗口函数

窗口函数大体可以分为以下两种

1.能够作为窗口函数的聚合函数(sum,avg,count,max,min)
2.rank( ),dense_rank( ),row_number( )等专用窗口函数。

row_number(): 没有并列,相同名次顺序排序

rank(): 有并列,相同名次空位(即类似于1 1 3)

dense_rank(): 有并列,相同名次不空位(即类似于1 1 2)

注意:窗口函数的别名位置是在over()子句之后。

<窗口函数> over ([partition by <列清单>]order by <排序用列清单>)

窗口函数over()使得聚合函数count()可以在限定的窗口中进行聚合。窗口函数over()和group by 的最大区别,在于group by之后其余列也必须按照此分区进行计算,而over()函数使得单个特征可以进行分区

窗口大小的设定

默认窗口大小是从起始行到当前行
partition by …order by…rows between unbounded preceding and current row
窗口大小为从起始行得到当前行。
partition by …order by… rows between 3 preceding and current row
窗口大小为从当前行到之前三行
partition by …order by… rows between 3 preceding and 1 following
窗口大小为当前行的前三行到之后的一行
partition by …order by… rows between 3 preceding and unbounded following
窗口大小为当前行的前三行到之后的所有行

3.1 rank( ),dens_rank( ),row_number()

select product_name, product_type, sale_price,rank () over (partition by product_typeorder by sale_price) as ranking
from Product;


partition by 能够设定排序的对象范围,类似于group by语句,这里就是以product_type划分排序范围。

order by能够指定哪一列,何种顺序进行排序。也可以通过asc,desc来指定升序降序。

窗口函数兼具分组和排序两种功能。通过partition by分组后的记录集合称为窗口。

然而partition by不是窗口函数所必须的,不限定时就是对所有数据进行排序。

select product_name, product_type, sale_price,rank () over (order by sale_price) as ranking
from Product;


1.rank函数:计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
2.dense_rank函数:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
3.row_number函数:赋予唯一的连续位次。

select product_name, product_type, sale_price,rank () over (order by sale_price) as ranking,dense_rank () over (order by sale_price) as dense_ranking,row_number () over (order by sale_price) as row_num
from Product;


由于窗口函数无需参数,因此通常括号里都是空的。
窗口函数的适用范围:只能在select子句中使用。

3.2 sum( ),avg( )等

select product_id, product_name, sale_price,sum(sale_price) over (order by product_id) as current_sum
from Product;


以累计的方式进行计算。计算出商品编号小于自己的商品的销售单价的合计值。

4. 参考

https://www.bilibili.com/video/av50213838/?p=15
https://mp.weixin.qq.com/s/PsY1mjLXmqTDp_py75jDHQ
https://blog.csdn.net/qq_37296285/article/details/90940591
https://blog.csdn.net/qq_41805514/article/details/81772182

Hive--sql中的窗口函数相关推荐

  1. Hive Sql中六种面试题型总结

    Hive Sql中六种面试题型总结 一.常用函数 二.N日留存 1.思路分析 三.连续登陆 1.数据准备 2.思路分析一 3.思路分析二 四.Top N 1.数据准备 2.思路分析 五.行列互转 1. ...

  2. Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lat ...

  3. SQL 中的窗口函数

    SQL 中的窗口函数(Window Functions)是一种特殊的函数,它可以在查询结果的某个区间内执行计算,而不仅仅是对单个行进行计算. 以下是一些常用的窗口函数: 1.ROW_NUMBER() ...

  4. spark sql中的窗口函数

    2019独角兽企业重金招聘Python工程师标准>>> databricks博客给出的窗口函数概述 Spark SQL supports three kinds of window ...

  5. Hive sql中的 各种join(内连接、左外连接、右外连接、满外连接)

    join语句 1 等值 join Hive支持通常的SQL JOIN语句,但是只支持等值连接,==不支持非等值连接==. 案例实操 select * from stu left join score ...

  6. Hive sql 中 order by、sort by、distribute by、cluster by用法

    名词解释: 名词解释: order by Hive中的order by和数据库中的order by 功能一致,按照某一项或者几项排序输出,可以指定是升序或者是降序排序.它保证全局有序,但是进行orde ...

  7. Hive SQL中的concat、concat_ws、concat_group列转行,行转列

    目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...

  8. hive sql中传date 指定后的“%Y-%m-%d“格式,需要加引号

    其中dt_playtime在shell中的变量赋值为dt_playtime=`date -d "$dt" +"%Y-%m-%d"` ##需要传递为字符串,加引号 ...

  9. 【数据库】HIVE SQL中的字符串连接函数(CONCAT)

    众所周知,在MySQL.SQLSERVER中,都有字符串连接函数,那么,HQL也不例外. 在学习.工作中,不可避免的会遇到需要将两个字段合并展示的需要. 最基础的一个方法是:CONCAT('abc', ...

  10. sql中的窗口函数:lead,lag

    偶然间发现两个非常好用的函数:lead,lag,它们可以将数据进行位移,位移之后用来计算环比应该是很容易了.因为涉及到位移,所以会有数据会被挪位而消失. lag :形象的理解就是把数据从上向下推,上端 ...

最新文章

  1. android picasso源码下载,Picasso:一个专为Android制作的强大的图片下载和缓存库
  2. 与癌症作战的 12 家 AI 公司,八仙过海各显神通
  3. 在SSH整合过程中:org/hibernate/engine/spi/SharedSessionContractImplementor
  4. c++成员运算符的重载
  5. android:autolink 颜色,Android设置完autoLink属性后自定义跳转到指定界面
  6. H3C交换机4核心节点IRF2虚拟化下检测机制
  7. 《专家速成手册》 做专家只需记住6点
  8. 正则表达式应用笔记----解析网页,获取并显示“未来三天全国天气预报”(java)...
  9. 乌克兰发布新版《网络安全战略》
  10. 最长公共子序列和最长子字符串_python_算法与数据结构
  11. spring-第十一篇之SpEL表达式
  12. Java中stringbutter_java 中String和StringBuffer与StringBuilder的区别及使用方法
  13. Echarts图列legend动态设置选中或者不选中 selected
  14. python入门算法_Python 算法入门教程
  15. 【VBA】日期时间函数总结(全)
  16. eis系统 java_Java消息系统介绍 - marvin_vov的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. android移动点餐系统内容和要求,基于Android云计算的移动点餐系统
  18. 【谈谈】动态规划——求最长公共子序列
  19. 2015广东强网杯web专题
  20. H5学习之11(html中的浮动布局)

热门文章

  1. 数据结构 --- 线性表(顺序存储结构)
  2. 笔记5 bean的作用域
  3. 高可用Kubernetes集群原理介绍
  4. Prism6下的MEF:添加Logger
  5. XPath 元素及属性查找
  6. Attaching the Script debugger to process ‘[****]’ on machine **** failed.
  7. shift and算法
  8. ClickHouse最简单的安装方法
  9. 记一次线上Zabbix对Redis监控实录
  10. 利用memoize缓存到Redis出现多个参数同一个结果