范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

从零开始学SQL数据分析,SQL窗口函数

  本文讲解窗口函数的概念,窗口函数与数据分组的功能相似,可以指定数据窗口进行统计分析,但窗口函数与数据分组又有所区别,窗口函数对每个组返回多行,而数据分组对每个组只返回一行;窗口函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,而数据分组是针对所有数据进行统计。
  窗口函数的写法:
  <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>)
  窗口函数主要有两种,一种是专用窗口函数,包括rank、dense_rank、row_number等。另一种是聚合函数,包括sum、avg、count、max、min等,本文逐一介绍窗口函数的五个功能,分别是聚合、排序、极值、移动、切片,下面一起来学习。
  首先创建一个金额表,年份、姓名、国家设置为字符串类型,交易金额设置为整型。 #创建金额表pay CREATE TABLE pay ( year VARCHAR ( 10 ), name VARCHAR ( 10 ), country VARCHAR ( 10 ), payment INT(10) );
  给金额表插入数值。 # 给金额表插入数据 INSERT INTO pay(year,name,country,payment) VALUES (2017,"Lining","China",1119), (2018,"Lining","China",1176), (2018,"Zhaoqi","China",1388), (2019,"Zhaoqi","China",1597), (2018,"Jackie","USA",1028), (2019,"Jackie","USA",1934), (2020,"Jackie","USA",1837), (2017,"Tom","India",1578), (2018,"Tom","India",1329), (2019,"Tom","India",1578), (2020,"Tom","India",1399);
  将所有的数据查询出来结果如下所示。 SELECT * from pay;
  一、聚合
  1、计算列表总金额 SELECT *, SUM(payment) OVER() as Total_payment from pay;
  计算当前列表的总金额可以使用窗口函数,sum是求和,over()中不添加参数,则对所有数据进行求和,输出的结果都是15963。
  2、计算各国家总金额 SELECT *, SUM(payment) OVER() as Total_payment, SUM(payment) OVER(PARTITION by country) as country_payment from pay;
  计算各国家总金额就要对各个国家分组,这里分组使用的是PARTITION by,PARTITION by的功能与GROUP BY的功能类似,指定按照那一列进行分组,用country分组求和,则每个country的输出结果一致。
  3、按国家降序累加求和金额 SELECT *, SUM(payment) OVER() as Total_payment, SUM(payment) OVER(PARTITION by country) as country_payment, SUM(payment) OVER(PARTITION by country ORDER BY payment DESC) as order_payment from pay;
  这里使用SQL中常用的向下累计求和的方法,当使用order by时,没有rows between则意味着窗口是从起始行到当前行,所以对不同国家进行累加求和操作。
  4、不同国家人数计数
  count()用于计数,与前面sum的用法基本一致,可以用count(distinct country)进行去重,如果用partition by进行分组,则分组后再计数。 SELECT *, COUNT(name) OVER() as Total_people, COUNT(name) OVER(PARTITION by country) as country_people from pay;
  5、 不同国家平均金额 SELECT *, AVG(payment) OVER() as avg_payment, AVG(payment) OVER(PARTITION by country) as country_ayg_payment from pay;
  使用avg聚合函数的用法与前面的聚合运算用法一致,PARTITION by同样用来分组,这里分组后求均值。
  6、各国家最低金额 SELECT *, MAX(payment) OVER() as Max_payment, MIN(payment) OVER(PARTITION by country) as country_min_payment from pay;
  这里MAX(payment)函数对整个数据计算最大值,使用PARTITION by对于不同的国家分组后然后计算最小值。
  二、排序
  1、各国家按金额排序
  使用窗口函数排序,会使用到三个函数,row_number,rank,dense_rank,他们的使用区别如下: row_number从1开始,按照顺序,生成分组内记录的序列; rank生成数据项在分组中的排名,排名相等会在名次中留下空位; dense_rank生成数据项在分组中的排名,排名相等会在名词中不会留下空位。 SELECT *, ROW_NUMBER()OVER(ORDER BY payment DESC) as "顺序排序", RANK()OVER(ORDER BY payment DESC) as "秩排序", DENSE_RANK()over(ORDER BY payment DESC) as "数据排序" from pay;
  row_number函数,按照行记录的顺序来排序,此处从1到11按顺序排列;rank函数,在排名相等会在名次中留下空位,此处共同排名为第4名,同时忽略第5名,继续往下排列;dense_rank排名相等会在名词中不会留下空位此处共同排名为第4名,不忽略第5名,继续往下排列。
  三、极值
  1、当前行金额最高的人
  first_value截止当前行的第一个,last_value截止当前行的最后一个。 select *, first_value(name)over(order by payment desc) as max_id, first_value(name)over(order by payment asc) as min_id, last_value(name)over(order by payment desc) as min_id_1, last_value(name)over(partition by country order by payment desc rows between unbounded preceding and unbounded following) as level_min_id from pay;
  first_value按分组排序后取范围内第1个值,last_value取最后1个值,因为默认窗口的关系,last_value会随着窗口的改变而改变,所以一般不用last_value,如果要用,则改变窗口为所有行,此处用来查询当前金额最大的人,以及截至当前金额最小的人。
  四、移动
  1、按国家分组金额排名前1位和后1位人名
  lag和lead是按照排序规则,取前多少位和后多少位,参数有3个,第1个是要取出来的列,第2个移动多少位,第3个是如果取不到,赋予的值,默认取不到是NULL。 select *, lag(name,1,null)over(partition by country order by payment desc) as lag_id, lead(name,1,"0")over(partition by country order by payment desc) as lead_id from pay;
  五、切片
  1、按金额切片
  ntile(n)用于将分组数据按照顺序切分成N片,返回当前切片值,ntile把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号,ntile(3)表示将表切分为3组,ntile可以分组排序后切分,表示对当前的组内进行切分后排序。 select *, ntile(3) over(order by payment desc) as total_part, ntile(2)over(partition by country order by payment desc) as level_part from pay;

电表在自己家,供电局是怎么知道用户偷电的?电表在自己家,供电局是怎么知道用户偷电的?供电公司是怎么发现偷电的?国家电网最近几十年一直在智能系统的建设中投入大量的研究。电力自动系统是一个以以太网的综合网络,它包括了综合应用(现在还有多少人是用移动8元套餐的,怎么样?我是移动8元套餐的老用户,用了大约十多年了。8元套餐是没有流量的,平时流量用量少的电话通讯少的用起来还划算。我的流量都是通过移动和我信兑金币以及移动会员转转贝获取的。流量够用,毕竟如何看待购买Applecare后故意损坏手机的行为?看到这个问题,我就想到在一个节目上,有一个人当面问强东哥,我每次在JD买手机都是玩到第六天就退回去,我好羞愧!然后大强子很慷慨的说道,7天无理由退货是每个消费者的权利,你没有必要羞水滴为什么能撞穿地球?什么原理?水滴是刘慈欣的科幻小说三体里,三体星人制造的一种水滴状的飞行器,仅仅一架这种飞行器就摧毁了人类文明的上千艘太空战舰。这种飞船之所以这么厉害的关键就是它的外壳是由强相互作用力材料构成大质量恒星能不能吞噬一颗小质量黑洞?黑洞,无论从能量上讲,还是引力上讲都是超强的。之所以称之为黑洞,就从侧面上说明有多恐怖了!听起来就不寒而栗了!吞噬恒星,不在话下!恒星和黑洞是两种性质不同的天体,从目前人类所知来看人类如何遥控操作远离地球的太空探测器?太空探测器远离地球几亿公里,人类还能操控,距离如此之远如何能遥控?这个很简单,就像遥控无人机一样,这边一按,那边就有响应了。不过,飞得太远,就有延时而已。不但会有延时,还有发送接收微信两端同时更新8。0。13版本推出新功能,iOS的小伙伴开心了就在昨天,微信又发布了8。0。13版本的更新,同时,PC端的微信也发布了3。3。5版本的更新,我想部分小伙伴会注意到,这两个月微信更新的频率明显加快了。那么接下来,我们一起看一看本微信8。0。13悄悄更新!Callkit功能逐渐回归,你升级了吗?分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!就在昨天,iOS微信悄悄更新了8。0。13版本,这节奏也快了吧,隔壁的安卓微信还处于8。0。11状态呢!从更新教你正确开启微信搜索功能?可以搜到任何想看的内容,太实用了手机微信搜索功能太强了,不用真的太可惜啦大家好,我是凉秋,在日常生活中越来越多的人选择使用微信,它不但可搜索文件,免费听歌,医院挂号还可以搜索一些比较有意思的表情包等等还不知道如何独立通话的智能手表,户外运动也能随时沟通运动的时候佩戴智能手表,已经不是什么新鲜的事情了。如果只是盲目运动,不仅浪费体力,还有可能会伤害身体。所以我们要讲究科学锻炼,这样的话,不仅可以提升锻炼效果,还能配合心率监测,避免微信将推出首个收费服务,或定价1015元月,128G手机有救了手机里最不能缺少的app,要说微信排第一,相信没有人会有异议。作为国民级应用,微信的用户早已超过10亿(12亿活跃用户),大家的工作和生活,都越来越离不开微信。微信从2011年推出
不愿断供!三星正向美方争取继续向华为出货显示面板9月15日对华为来说将是关键性的时间节点,此前余承东已经确认,由于制裁,麒麟高端芯片在那之后将无法生产。本周,韩媒传出,三星SK海力士9月15日后将暂停将华为供应存储芯片,目前两家4G和5G的区别你们真的知道吗?最近华为新发布的p50没有5G也成为了网友们的一大讨论热点,虽然没有5G的原因大家众所周知,但不少网友还是担心,有5G的手机还买4G的会不会不划算。大家真的知道4G和5G的区别吗?骑行车辆的艰难选择骑了许久的山地,突然想换公路车骑骑,感受一下公路的快感,于是就去店里看看车,看看有没有合适的。本来预算是4000左右,由于这个价位的车车店现在没有于是推荐了一款7000左右的车。这红米k40pro惨遭众人吐槽,都有哪些缺点作为小米备受重视的一款中高端旗舰机,红米K40pro虽然销量排在前三,但网上的吐槽却很多,也许是因为手机热度高使用的人多,所以它的缺点也会遭到更多的关注,接下来说说它都有哪些缺点。斗不过甄嬛传里的娘娘,但她开得了车,怼得过金主爸爸她是甄嬛传里出尽坏招的曹贵人,是正阳门下个性十足的村姑孟小杏,还是武则天中对主忠心为大爱甘愿牺牲的杨长史大家看到她的第一反应是,好脸熟,第二反应是,这不是曹贵人吗,第三反应是,她叫川久保玲旗下品牌tricotCOMMEdesGARONS正式更名为tao10月19日,日本时装设计大师川久保玲(ReiKawakubo)打造的COMMEdesGARONS(以下简称CDG集团)旗下品牌tricotCOMMEdesGARONS正式更名为t瑞士独立制表品牌Breitling百年灵的少数股权被私募基金收购10月26日,瑞士私募股权投资公司PartnersGroup宣布,已同意从私募基金CVCCapital手中收购了瑞士独立制表品牌Breitling(百年灵)的重要少数股权。收购完成iOS12。3正式版更新,一起来看看新版本到底何如!iOS12。3正式版体验分享2019年5月14日凌晨苹果正式发布了iOS12。3正式版,本次版本号为12。3(16F156),更新包大小为500M左右。本次测试设备为iPhoneXiOS12。4测试版来了!这个版本体验到底何如,看这里!iOS12。4beta版体验分享今天凌晨苹果向开发者推送了iOS12。4的第一个beta版。版本号为12。4(16G5027g)体验设备为iPhoneXiPhone7PlusiPhiOS13beta2到来,半个月的等待是否值得?让我们来看看iOS13beta2体验分享今天凌晨,iOS13beta2如约而至,时隔半个月,让我们看看苹果到底都修复了些什么。体验设备为iPhoneX一更新内容升级之后的版本号为13。0(17iOS13beta3体验分享,让我们看看苹果这半个月都干了啥时隔半个月的时间,苹果向开发者推送了iOS13的第三个开发者预览版。版本号13。0(17A55221f)本次体验设备iPhoneX一更新内容1短信中的选择信息变更为管理信息列表。2