首页 > 解决方案 > 如何根据特定列选择重复项

问题描述

我想根据两列计算不同的值,并仅根据这些列的不同值复制清理后的表。

原始表有 5 列。

b_id  | col1  | col2 | col3 | col4 
1     | c11   | c21  | c31  | c41
2     | c21   | c22  | c23  | c24
3     | c31   | c22  | c23  | c24
4     | c41   | c42  | c44  | c44
4     | c41   | c52  | c53  | c54
6     | c61   | c62  | c63  | c64
6     | c61   | c72  | c73  | c74
7     | c71   | c72  | c73  | c74

我只想选择:

b_id | col1  | col2 | col3 | col4 
1     | c11   | c21  | c31  | c41
2     | c21   | c22  | c23  | c24
3     | c31   | c22  | c23  | c24
4     | c41   | c42  | c44  | c44
6     | c61   | c62  | c63  | c64
7     | c71   | c72  | c73  | c74

因为 b_id & col1 有重复。我不介意 col2、col3 和 col4 上是否存在重复项。

我试过这个:

DROP TABLE IF EXISTS 
new_table

CREATE TABLE 
new_table

AS (

select distinct 
b_id
, col1

from 
old_table

WHERE
col2 IN (val1, val2, val3, val4)
    AND col4 = xxx

);

但这选择了我需要的不同值,但只有这两列而不是其余列...:-/

有任何想法吗?谢谢!

标签: sqlamazon-redshift

解决方案


这应该可以解决问题:

select distinct b_id, col1,max(col2),max(col3),max(col4)
from old_tables
group by b_id, col1;

(只要您不关心将从 col2-col4 中获取哪个值)


推荐阅读