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

太原建站模板厂家鞍山微信小程序开发公司

太原建站模板厂家,鞍山微信小程序开发公司,河南省建设监理协会官方网站,深圳设计公司招聘网站1、UDTF之explode函数 explode(array)将array列表里的每个元素生成一行; explode(map)将map里的每一对元素作为一行,其中key为一列,value为一列; 一般情况下,explode函数可以直接使用即可,也可以根据需要结…

1、UDTF之explode函数
explode(array)将array列表里的每个元素生成一行;
explode(map)将map里的每一对元素作为一行,其中key为一列,value为一列;
一般情况下,explode函数可以直接使用即可,也可以根据需要结合lateral view侧视图使用。

explode函数单数使用
select explode(array(11,22,33)) as item;
select explode(map(“id”,10086,“name”,“zhangsan”,“age”,18));
在这里插入图片描述
Lateral View是一种特殊的语法,主要用于搭配UDTF类型功能的函数一起使用,用于解决UDTF函数的一些查询限制的问题。
侧视图的原理是将UDTF的结果构建成一个类似于视图的表,然后将原表中的每一行和UDTF函数输出的每一行进行连接,生成一张新的虚拟表。这样就避免了UDTF的使用限制问题。使用lateral view时也可以对UDTF产生的记录设置字段名称,产生的字段可以用于group by、order by 、limit等语句中,不需要再单独嵌套一层子查询。
一般只要使用UDTF,就会固定搭配lateral view使用。

理解:explode炸裂之后的一张表,lateral view 就相当于把原表A 和炸裂后的表B构建笛卡尔集,再从笛卡尔集的表中select需要的字段数据

2、Aggregation 聚合函数
HQL提供了几种内置的UDAF聚合函数,例如max(…),min(…)和avg(…)。sum() count(*) count(列名)。这些我们把它称之为基础的聚合函数。
通常情况下,聚合函数会与GROUP BY子句一起使用。having是对聚合函数进行取值上的过滤

grouping sets是一种将多个group by逻辑写在一个sql语句中的便利写法。
等价于将不同维度的GROUP BY结果集进行UNION ALL。
GROUPING__ID表示结果属于哪一个分组集合。

Cube
cube的语法功能指的是:根据GROUP BY的维度的所有组合进行聚合。
对于cube,如果有n个维度,则所有组合的总个数是:2^n。
比如Cube有a,b,c3个维度,则所有组合情况是:
((a,b,c),(a,b),(b,c),(a,c),(a),(b),©,())。

------cube---------------
SELECTmonth,day,COUNT(DISTINCT cookieid) AS nums,GROUPING__ID
FROM cookie_info
GROUP BY month,day
WITH CUBE
ORDER BY GROUPING__ID;--等价于
SELECT NULL,NULL,COUNT(DISTINCT cookieid) AS nums,0 AS GROUPING__ID FROM cookie_info
UNION ALL
SELECT month,NULL,COUNT(DISTINCT cookieid) AS nums,1 AS GROUPING__ID FROM cookie_info GROUP BY month
UNION ALL
SELECT NULL,day,COUNT(DISTINCT cookieid) AS nums,2 AS GROUPING__ID FROM cookie_info GROUP BY day
UNION ALL
SELECT month,day,COUNT(DISTINCT cookieid) AS nums,3 AS GROUPING__ID FROM cookie_info GROUP BY month,day;

3、Window functions 窗口函数
**窗口函数(Window functions)**是一种SQL函数,非常适合于数据分析,因此也叫做OLAP函数,其最大特点是:输入值是从SELECT语句的结果集中的一行或多行的“窗口”中获取的。

通过OVER子句,窗口函数与其他SQL函数有所区别。如果函数具有OVER子句,则它是窗口函数。如果它缺少OVER子句,则它是一个普通的聚合函数

窗口函数可以简单地解释为类似于聚合函数的计算函数,但是通过GROUP BY子句组合的常规聚合会隐藏正在聚合的各个行,最终输出一行,窗口函数聚合后还可以访问当中的各个行,并且可以将这些行中的某些属性添加到结果集中。

在这里插入图片描述
语法树

--2、sum+窗口函数 总共有四种用法 注意是整体聚合 还是累积聚合
--sum(...) over( )对表所有行求和
--sum(...) over( order by ... ) 连续累积求和
--sum(...) over( partition by... ) 同组内所有行求和
--sum(...) over( partition by... order by ... ) 在每个分组内,连续累积求和

4、窗口表达式
在sum(…) over( partition by… order by … )语法完整的情况下,进行的累积聚合操作,默认累积聚合行为是:从第一行聚合到当前行。
Window expression窗口表达式给我们提供了一种控制行范围的能力,比如向前2行,向后3行。

关键字是rows between,包括下面这几个选项
- preceding:往前
- following:往后
- current row:当前行
- unbounded:边界
- unbounded preceding 表示从前面的起点
- unbounded following:表示到后面的终点
---窗口表达式
--第一行到当前行
select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime rows between unbounded preceding and current row) as pv2
from website_pv_info;--向前3行至当前行
select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime rows between 3 preceding and current row) as pv4
from website_pv_info;--向前3行 向后1行
select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime rows between 3 preceding and 1 following) as pv5
from website_pv_info;--当前行至最后一行
select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime rows between current row and unbounded following) as pv6
from website_pv_info;--第一行到最后一行 也就是分组内的所有行
select cookieid,createtime,pv,sum(pv) over(partition by cookieid order by createtime rows between unbounded preceding  and unbounded following) as pv6
from website_pv_info;

5、窗口排序函数

窗口排序函数用于给每个分组内的数据打上排序的标号。注意窗口排序函数不支持窗口表达式。
row_number:在每个分组中,为每行分配一个从1开始的唯一序列号,递增,不考虑重复;
rank: 在每个分组中,为每行分配一个从1开始的序列号,考虑重复,挤占后续位置;
dense_rank: 在每个分组中,为每行分配一个从1开始的序列号,考虑重复,不挤占后续位置;

上述这三个函数用于分组TopN的场景非常适合。

-----窗口排序函数
SELECTcookieid,createtime,pv,RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn1,DENSE_RANK() OVER(PARTITION BY cookieid ORDER BY pv desc) AS rn2,ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv DESC) AS rn3
FROM website_pv_info
WHERE cookieid = 'cookie1';

在这里插入图片描述
在统计分组topN中经常用到这几个开窗排序函数

--需求:找出每个用户访问pv最多的Top3 重复并列的不考虑
SELECT * from
(SELECTcookieid,createtime,pv,ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv DESC) AS seq
FROM website_pv_info) tmp where tmp.seq <4;
http://www.yayakq.cn/news/479154/

相关文章:

  • 做淘宝客没有网站怎么做政务服务网站建设整改报告
  • 零基础网站建设教学服务网站开发有哪些服务器
  • 韩国儿童才艺网站建设模板济南网站搭建公司
  • 国内比较好用的建筑案例网站如何网上做个人广告
  • 零基础自学做网站永城信息港
  • 嘉鱼网站建设网络推广怎么做效果好
  • 北京建设银行支行查询官方网站wordpress注册表文件
  • 坂田做网站多少钱适合网络科技的公司名字
  • 网站建设举报网站开发 软件有哪些
  • 网站改版需要重新备案吗个人网站建设心得体会
  • 网页设计中优秀的网站企业彩铃制作网站
  • 网站建设歺首选金手指14为什么做网站能赚钱
  • 计算机网站建设文献综述广州市番禺区
  • 专业公司网站 南通网站建设教程
  • 自助建子站优化营商环境条例全文
  • 大庆网站开发专门做同人h的网站
  • 上海人才网站首页国微 网站建设
  • 做网站中显示链接中内容快递公司网站制作
  • jsp个人网站设计男科医院治疗一次2000元
  • 怎么做招生网站网络规划设计师视频徐朋百度网盘
  • 湖北网站开发公司网站的标志是什么字体
  • wordpress网站百度搜索吗织梦dedecms大气微电影网站模板
  • 微信二维码制作网站朝阳网站seo
  • 手机网站怎么布局有网站后台
  • 律师做推广宣传的网站WordPress更改数据库连接
  • 海外网站免费建设黄金软件在线下载
  • 创建网站代码是什么兰州网站网站建设
  • 买外贸服装去哪个网站wordpress新闻发布
  • 门户网站的主要特点网站建设流程有哪七步
  • 大型网站开发技术文化墙设计公司官网