Google Bigquery:删除列值不同的行(count = 1)而不引用表

时间:2015-04-14 20:28:49

标签: sql group-by filtering distinct google-bigquery

给定一个表,我希望删除列值不同的行。

因此,如果我们想对矩阵A上的column2执行此操作

     c1 c2 c3
A = |1  2  4 |
    |1  2  5 |
    |1  1  6 |

产量

     c1 c2 c3
A = |1  2  4 |
    |1  2  5 |

这可以通过

轻松完成
SELECT * FROM Table WHERE c2 IN
(SELECT c2 FROM Table GROUP BY c2 HAVING COUNT(*) > 1)

不幸的是,在子查询的中间,你没有将数据存储在表中,我不想创建一个视图,因为我需要在一个查询中进行全部过滤。 / p>

关于如何在不引用子查询中的表的情况下仍然针对单个列过滤掉不同行的任何想法?

解决方案应采用以下形式:

SELECT <something goes here>
FROM <the subquery which outputs A goes here>
<anything you want here that is legal Bigquery - e.g. can't reference A>

并且没有可供参考的表格。

1 个答案:

答案 0 :(得分:4)

Bigquery支持窗口函数,因此您可以这样做:

select t.*
from (select t.*, count(*) over (partition by col2) as cnt
      from table t
     ) t
where cnt >= 2;

这仍然引用子查询中的表,但这是对表的唯一引用。