代码之家  ›  专栏  ›  技术社区  ›  Abhishek

在特定列上选择distinct,但在配置单元中也选择其他列

  •  4
  • Abhishek  · 技术社区  · 7 年前

    我在hive中的一个表中有多个列,大约有80列。我需要在一些列上应用distinct子句,并从其他列中获取第一个值。以下是我努力实现的目标。

    select distinct(col1,col2,col3),col5,col6,col7
    from abc where col1 = 'something';
    

    上面提到的所有列都是文本列。所以我不能应用分组和聚合函数。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Safwan    7 年前

    您可以使用 row_number

    create table temp as
    select *, row_number() over (partition by col1,col2,col3) as rn
    from abc 
    where col1 = 'something';
    
    select *
    from temp
    where rn=1
    

    您还可以在分区时对表进行排序。

    row_number() over (partition by col1,col2,col3 order by col4 asc) as rn

        2
  •  0
  •   deusxmach1na    7 年前

    DISTINCT是SQL中使用最多、理解最少的函数。这是在整个结果集上执行的最后一项操作,并使用select中的所有列删除重复项。你可以用一个字符串分组,事实上这就是答案:

    SELECT col1,col2,col3,COLLECT_SET(col4),COLLECT_SET(col5),COLLECT_SET(col6)
    FROM abc WHERE col1 = 'something'
    GROUP BY col1,col2,col3;
    

    现在我重读了你的问题,我真的不确定你在追求什么。您可能需要将表连接到自身的聚合。