窗口函数语法
<窗口函数> over ( [partition by <列清单>]
order by <排序用列清单>)
partition by 相当于sql中的group by,区别是partition by并不会减少原表中记录的行数,并不具备GROUP BY 子句的汇总功能,group by结果分组之后每组只有一条数据
能够作为窗口函数使用的函数
① 能够作为窗口函数的聚合函数( SUM 、 AVG 、 COUNT 、 MAX 、 MIN )
② RANK 、 DENSE _ RANK 、 ROW _ NUMBER 等专用窗口函数
RANK 函数
计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、4 位……
DENSE_RANK 函数
同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
例)有 3 条记录排在第 1 位时:1 位、1 位、1 位、2 位……
ROW_NUMBER 函数
赋予唯一的连续位次。
例)有 3 条记录排在第 1 位时:1 位、2 位、3 位、4 位……
行转列
用union
或者
select user_id,order_value,order_id
from lie_col
lateral view explode(split(order_value,',')) num as order_id
limit 10;
列转行
用case when
CASE WHEN < 求值表达式 > THEN < 表达式 >
WHEN < 求值表达式 > THEN < 表达式 >
WHEN < 求值表达式 > THEN < 表达式 >
...
else<表达式>
END
或者
concat_ws(',',collect_list(order_id)) as order_value
from col_lie
group by user_id
limit 10;