一、CTE语法
CTE语法类似子查询,可以将一个select语句计算的结果当成一个新的临时表使用
-- 子查询,将子查询的结果当做表使用 select empno,ename from ( select * from emp) t1;
-- 基本用法 with 临时表名 as(查询语句) select * from 临时表名 -- 多个计算结果保存 with tb1 as(查询语句),, tb2 as(查询语句 select * from tb1), tb3 as(查询语句) ..... select * from tb3 join tb2
with tb1 as(select * from emp) select ename,sal from tb1;
将如下子查询改为cte语法实现
SELECT t2.shop, t2.user_id, t2.cnt FROM (SELECT t1.*, row_number() over (partition BY t1.shop ORDER BY t1.cnt DESC) rk FROM (SELECT user_id, shop, count(*) AS cnt FROM test2 GROUP BY user_id, shop) t1) t2 WHERE rk <= 3;
-- CTE语法可以方便代码阅读,将多个计算步骤拆分 with tb1 as( SELECT user_id, shop, count(*) AS cnt FROM test2 GROUP BY user_id, shop ), tb2 as( SELECT tb1.*, row_number() over (partition BY tb1.shop ORDER BY tb1.cnt DESC) rk FROM tb1 ) select * from tb2 where rk <=3;
窗口函数和CTE语法是mysql8.0以上版本支持
二、爆炸函数和合并函数
函数的分类:
udf(user define function) 函数 数据输入多少,返回多少行数据 计算是一进一出
hive中的大部分函数都是udf函数
udaf (user define aggregation function)函数 输入多行数据返回一行结果 多进一出
聚合方法
sum
avg
count
ma