赞
踩
upper – (转大写)
select upper(‘abc’);
length – (字符串长度,字符数)
select length(‘abc’);
concat – (字符串拼接)
select concat(‘A’,‘B’,‘C’); # ABC
concat_ws – (指定分隔符)
select concat_ws(‘-’,‘a’,‘b’,‘c’); # a-b-c
substr-- (求子串)
select substr(‘abcde’,3); # cde
select substr(‘abcde’,2,3); # bc
split(str ,regex) – 切分字符串,返回数组。
select split(“a-b-c-d-e-f”,“-”);
cast(value as type) – 类型转换
select cast(“123” as int)+1;
round – 四舍五入((42.3 ->42))
select round(42.3);
ceil – 向上取整(42.3=>43)
select ceil(42.3);
floor – 向下取整(42.3=>42)
select floor(42.3);
nvl(value ,default value):如果value为null,则使用default value,否则使用本身value.
select if(1>2 ,ture,false); # 返回false
select coalesce(1,2,3,4,5) # 返回第一个不为空的 本题返回 1
select coalesce(NULL,2,3,4,5) # 本题返回 2
窗口函数over简介
先来看一下这个需求:求每个部门的员工信息以及部门的平均工资。在mysql中如何实现呢
SELECT emp.*,avg_sal
FROM emp
J0IN (
SELECT deptno
,round(AVG(ifnull(sal, 0))) AS avg_sal
FR0M emp
GROUP BY deptno
) t
ON emp.deptno = t.deptno
ORDER BY deptno;
select emp.*,(select avg(ifnull(sal,0)) from emp B where B.deptno = A.deptno) from emp A;
通过这个需求我们可以看到,如果要查询详细记录和聚合数据,必须要经过两次查询,比较麻烦。这个时候,我们使用窗口函数,会方便很多。那么窗口函数是什么呢?
-1)窗口函数又名开窗函数。属于分析函数的一种。
-2)是一种用于解决复杂报表统计需求的函数。
-3)窗口函数常用于计算基于组的某种值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。简单的说窗口函故对每条详细记录开一个面口,进行聚合遶计的查询
-4)开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。
-5)窗口函数一般不单独使用
-6)窗口函数内也可以分组和排序
案例准备
数据准备order.txt
姓名 购买日期 购买数量
saml,2018-01-01,10
tomy,2018-01-02,15
saml,2018-02-03,23
…
– 1.创建order表:
create table if not exists t_order(
name string,
orderdata string,
cost int
)row format delimited fields terminated by ‘,’;
– 2.加载数据
load data local inpath “./root/order.txt” into table t_order;
需求:查询每个订单的信息,以及订单的总数
– 1.不使用窗口函数
– 查询所有明细
select * from t_order;
#查询总量
select count(*) from t_order;
– 2.使用窗口函数:通常格式为可用函数+over()函数
select , count() over() from t_order;
– 查询返回的结果
saml,2018-01-01,10 3
tomy,2018-01-02,15 3
saml,2018-02-03,23 3
注意:
窗口函数是针对每一行数据的.
如果over中没有指定参数默认窗口大小为全部结果集
需求:查询在2018年1月份购买过的顾客购买明细及总人数
select * ,count(*) over()
from t_order
where substring(orderdate,1,7) = ‘2018-01’;
– 查询返回的结果
saml,2018-01-01,10 2
tomy,2018-01-02,15 2
在over窗口中进行分组,对某一字段进行分组统计,窗口大小就是同一个组的所有记录
需求:查看顾客的购买明细及月购买总额
select name,orderdate,cost,sum(cost) over (distribute by month(orderdate))
from t_order;
saml,2018-01-01,10 33
tomy,2018-01-02,15 15
saml,2018-02-03,23 33
需求:查看顾客的购买明细及每个顾客的月购买总额
select name,orderdate,cost,sum(cost) over (distribute by name, month(orderdate))
from t_order;
saml,2018-01-01,10 33
tomy,2018-01-02,15 15
saml,2018-02-03,23 33
sort by子句会让输入的数据强制排序(强调:当使用排序时,窗口会在组内逐行变大)
需求:查看顾客的购买明细及每个顾客的月购买总额,并且按照日期降序排序
select name,orderdate,cost,
sum(cost) over (distribute by name, month(orderdate)
sort by orderdata desc)
from t_order;
saml,2018-01-01,10 10
saml,2018-02-03,23 33
saml,2018-02-03,53 86
tomy,2018-01-02,15 15
如果要对窗口的结果做更细粒度的划分,那么就使用window子句,常见的有下面几个
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,
UNBOUNDED PRECEDING:表示从前面的起点,
UNBOUNDED FOLLOWING:表示到后面的终点
需求:查看顾客到目前为止的购买总额
select name,
t_order.orderdata,
cost,
sum(cost) over(partition by name order by orderdata rows between UNBOUNDED PRECEDING and current row) as allCount
from t_order;
需求:求每个顾客最近三次的消费总额
select name,orderdate,cost,
sum(cost) over(partition by name order by orderdata rows between 2 PRECEDING and current row)
from t_order;
NTILE
ntile 是Hive很强大的一个分析函数。可以看成是:它把有序的数据集合平均分配到指定的数量(num)个榻中,将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。
例子:
select name,orderdate,cost,
ntile(3) over(partition by name), #按照name进行分组,在分组内将数据切成3份
from t_order;
准备数据 stu_score.txt
create table if not exists stu_score(
userid int,
classno string,
score int
)
row format delimited
fields terminated by ’ ';
local data inpath ‘./root/stu_score.txt’ overwrite into table stu_score;
介绍
案例
idea maven项目HiveFunction 在pom.xml加入以下maven的依赖包
org.apache.hive
hive-exec
2.1.1
写个类 ConcatString
public class ConcatString extends UDF{
public String evaluate(String str){
return str+“!”;
}
}
注意
1.继承org.apache.hadoop.hive.al.exec.UDF
2.编写evaluate(),这个方法不是由接口定义的,因为它可接受的参数的个数,数据类型都是不确定的。Hive会检查UDF ,看能否找到和函数调用相匹配的evaluate()方法
第一种:命令加载(只针对当前的session有效)
打包 双击package
HiveFunction-1.0.jar
上传上去
[root@tianqinglong01 ~]# mv HiveFunction-1.0.jar function.jar
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-NeOPk2RY-1713784599007)]
[外链图片转存中…(img-Nbki4dSz-1713784599007)]
[外链图片转存中…(img-6OuNDeLw-1713784599008)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
[外链图片转存中…(img-rVvak9nC-1713784599008)]
这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
[外链图片转存中…(img-fWhiuWBL-1713784599008)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。