根据列中的重复字段删除行

时间:2019-05-22 00:34:41

标签: sql google-bigquery

我有一张桌子,上面有这样的字段

F1  F2   F3  F4
1    4    A   5
2    4    A   5
3    4    B   5
4    4    C   5
5    4    D   5

我想删除F3是重复项的所有行,因此为了在字段F3中不获取重复值:

F1  F2   F3  F4
1    4    A   5
3    4    B   5
4    4    C   5
5    4    D   5

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用聚合:

select any_value(f1), any_value(f2), f3, any_value(f4)
from t
group by f3;

如果您希望所有值都来自特定行,则可以使用row_number()

select t.* except (seqnum)
from (select t.*,
             row_number() over (partition by f3 order by f3) as seqnum
      from t
     ) t;

您可以调整order by键以指定要保留的行(例如最大的f1值或其他值)。

另一种方法是:

select as value any_value(t)
from t
group by f3;

答案 1 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY F3

您可以使用问题中的示例数据来进行测试,如上示例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 F1, 4 F2, 'A' F3, 5 F4 UNION ALL
  SELECT 2, 4, 'A', 5 UNION ALL
  SELECT 3, 4, 'B', 5 UNION ALL
  SELECT 4, 4, 'C', 5 UNION ALL
  SELECT 5, 4, 'D', 5 
)
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY F3   

有结果

Row F1  F2  F3  F4   
1   1   4   A   5    
2   3   4   B   5    
3   4   4   C   5    
4   5   4   D   5