1. 端上跨节点漏斗
多个join,然后比较各自的时间挫.
2. 窗口函数(教程: https://help.aliyun.com/document_detail/34994.html )
作用: 1. 取前n条详情,
2. 聚合.. 避免contact过多. 比较繁琐,需要三次select
1select 先给每行分配行数,2select然后只保留前三行, 3select+group by.
CONCAT_WS(",",COLLECT_SET(org_id) ) org_ids 或者 group_concat
3. 保留原行数, 不通过group by 但每行新增group by 后的字段.
例子 每行新增部门平均数: SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
depname | empno | salary | avg
-----------+-------+--------+-----------------------
develop | 11 | 5200 | 5020.0000000000000000
develop | 7 | 4200 | 5020.0000000000000000
develop | 9 | 4500 | 5020.0000000000000000
develop | 8 | 6000 | 5020.0000000000000000
develop | 10 | 5200 | 5020.0000000000000000
personnel | 5 | 3500 | 3700.0000000000000000
personnel | 2 | 3900 | 3700.0000000000000000
sales | 3 | 4800 | 4866.6666666666666667
sales | 1 | 5000 | 4866.6666666666666667
sales | 4 | 4800 | 4866.6666666666666667
(10 rows)
附录:
窗口函数的格式语法声明如下:
window_func() over (partition by [col1,col2…]
[order by [col1[asc|desc], col2[asc|desc]…]] windowing_clause)
- window_func(): Ntile,Rank,Dense_Rank, Row_Number,Lag, Lead,FIRST_VALUE, LAST_VALUE
first_value: 取分组内排序后,截止到当前行,第一个值
last_value: 取分组内排序后,截止到当前行,最后一个值
- partition by部分用来指定开窗的列。分区列的值相同的行被视为在同一个窗口内。现阶段,同一窗口内最多包含1亿行数据(建议不超过500万行),否则运行时报错。
- order by用来指定数据在一个窗口内如何排序。
- windowing_clause部分可以用rows指定开窗方式,有以下两种方式:
- rows between x preceding|following and y preceding|following表示窗口范围是从前或后x行到前或后y行。
- rows x preceding|following窗口范围是从前或后第x行到当前行。