首页 > 解决方案 > SQL DISTINCT 基于单个列,但保留所有列作为输出

问题描述

--mytable
col1 col2 col3
1    A    red
2    A    green
3    B    purple
4    C    blue

让我们调用上面的表格mytable。我只想从中选择不同的col2

SELECT DISTINCT
 col2
FROM
 mytable

当我这样做时,输出看起来像这样,这是预期的:

col2
A
B
C

但是如何执行相同类型的查询,但保留所有列?输出如下所示。本质上,我正在mytable查看col2,当多次出现时,col2保留第一行。

col1 col2 col3
1    A    red
3    B    purple
4    C    blue

SQL 函数(例如DISTINCT)是否有我可以设置的参数?我可以想象它类似于KeepAllColumns = TRUE这个 DISTINCT 函数?还是我需要执行JOINs 才能得到我想要的?

标签: sqljoindistinctteradata

解决方案


您可以使用窗口函数,特别是row_number()

select t.*
from (select t.*, row_number() over (partition by col2 order by col2) as seqnum
      from mytable t
     ) t
where seqnum = 1;

row_number()枚举行,从“1”开始。您可以控制是否获取最旧、最早、最大、最小的 . . .


推荐阅读