DENSE_RANK的替代品

时间:2017-01-14 21:06:31

标签: sql group-by bigdata

我有下表(table1):

f_name   | email
---------|---------------------
john     | john123@hotmail.com
peter    | peter456@gmail.com
johnny   | john123@hotmail.com
peter8   | peter456@gmail.com  
...

我想为同一个电子邮件值列添加Group号码:

f_name   | email               |Group |
---------|---------------------|------|
john     | john123@hotmail.com | 1    |
peter    | peter456@gmail.com  | 2    | 
johnny   | john123@hotmail.com | 1    |
peter8   | peter456@gmail.com  | 2    | 
...

我使用以下内容:

SELECT
    email,
    s_index = ROW_NUMBER() OVER(PARTITION BY [email] ORDER BY [email]),
    t_index = DENSE_RANK() OVER (ORDER BY [email])
FROM dbo.table1

这是在Oracle中为大数据执行此操作的最佳方式吗?如何在Impala中完成?

1 个答案:

答案 0 :(得分:1)

可能很慢,也许不适用;但如果您正在寻找dense_rank()的替代方案......

如果您的表格除了f_nameemail - 还有一些唯一ID,那么可以将每个email - 组的最小ID作为{{1}的值}。当然,groupId必须与id具有相同的类型,并且groupId的值不连续也无关紧要,即它们会有间隙:

groupId