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 条记录