首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于某些列,在表中取消重复行,并在单元格中的其他列中保留相应的值。

问对于某些列,在表中取消重复行,并在单元格中的其他列中保留相应的值。
EN

Stack Overflow用户
提问于 2015-12-07 16:50:38
回答 1查看 111关注 0票数 1

我需要使用一个包含7列的现有表在单元格中创建一个临时表。我只想去除前三列的重复项,并在其他4列中保留相应的值。我不在乎实际删除哪一行,而只使用前三行进行反复制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 20:49:56

如果您没有考虑订购,您可以使用如下所示的东西

代码语言:javascript
复制
create table table2 as 
select col1, col2, col3, 
      ,split(agg_col,"|")[0] as col4
      ,split(agg_col,"|")[1] as col5
      ,split(agg_col,"|")[2] as col6
      ,split(agg_col,"|")[3] as col7
from (Select col1, col2, col3,
             max(concat(cast(col4 as string),"|", 
                        cast(col5 as string),"|",
                        cast(col6 as string),"|",
                        cast(col7 as string))) as agg_col
from table1
group by col1,col2,col3 ) A;

下面是另一种方法,它可以很大程度上控制排序,但比上面的方法慢。

代码语言:javascript
复制
create table table2 as 
select col1, col2, col3,max(col4), max(col5), max(col6), max(col7)
from (Select col1, col2, col3,col4, col5, col6, col7,
             rank() over ( partition by col1, col2, col3 
                           order by col4 desc, col5 desc, col6 desc, col7 desc ) as col_rank
from table1 ) A
where A.col_rank = 1
GROUP BY col1, col2, col3;

级别()高于(.)如果order列都相等,则函数返回多个列,秩为'1‘。在我们的例子中,如果所有七列都有两个值完全相同的列,那么当我们使用col_rank =1时,就会出现重复的情况。这些重复项可以使用max和group子句进行删除,如上面的查询所写。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34138868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档