Impala SQL return 前 3 组记录
Impala SQL return top 3 grouped records
我在 impala.I 上有这个 table 示例,我想为每个来电者 number_of_call 获取最大顶部
呼叫者和 group_id 是独一无二的组合在一起
caller | group_id |number_of_call
23 | 4433 | 12
45 | 342 | 5
23 | 475 | 33
45 | 732 | 9
46 | 4433 | 2
23 | 522 | 5
45 | 475 | 54
23 | 342 | 32
45 | 342 | 43
预期输出
caller | group_id | number_of_call
23 | 475 | 33
23 | 342 | 32
23 | 4433 | 12
46 | 4433 | 2
45 | 475 | 54
45 | 342 | 43
45 | 732 | 9
您可以使用 window 函数来解决每组最多 n 个问题:
select *
from
select t.*, row_number() over(partition by caller order by number_of_calls desc) rn
from mytable t
) t
where rn <= 3
order by caller, rn
在子查询中,row_number()
对具有相同 caller
的记录进行降序排列 number_of_calls
。然后,外部查询过滤每个 caller
.
的前 3 条记录
我在 impala.I 上有这个 table 示例,我想为每个来电者 number_of_call 获取最大顶部
呼叫者和 group_id 是独一无二的组合在一起
caller | group_id |number_of_call
23 | 4433 | 12
45 | 342 | 5
23 | 475 | 33
45 | 732 | 9
46 | 4433 | 2
23 | 522 | 5
45 | 475 | 54
23 | 342 | 32
45 | 342 | 43
预期输出
caller | group_id | number_of_call
23 | 475 | 33
23 | 342 | 32
23 | 4433 | 12
46 | 4433 | 2
45 | 475 | 54
45 | 342 | 43
45 | 732 | 9
您可以使用 window 函数来解决每组最多 n 个问题:
select *
from
select t.*, row_number() over(partition by caller order by number_of_calls desc) rn
from mytable t
) t
where rn <= 3
order by caller, rn
在子查询中,row_number()
对具有相同 caller
的记录进行降序排列 number_of_calls
。然后,外部查询过滤每个 caller
.