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

Sql Google Bigquery:删除列值不同(count=1)的行,而不引用表,sql,group-by,filtering,distinct,google-bigquery,Sql,Group By,Filtering,Distinct,Google Bigquery,给定一个表,我希望删除列值不同的行 所以如果我们想对矩阵A上的第2列这样做 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)

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

所以如果我们想对矩阵A上的第2列这样做

     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)

不幸的是,在子查询的中间,您没有存储在表中的数据,并且我不想创建视图,因为我需要对所有查询进行过滤。

关于如何在不引用子查询中的表的情况下,针对单个列筛选出不同的行,有什么想法吗

解决方案的形式应为:

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>

并且没有可引用的表。

Bigquery支持窗口函数,因此您可以执行以下操作:

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

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

Bigquery支持窗口函数,因此您可以执行以下操作:

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


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

为什么不希望在子查询中引用它?因为我没有筛选表,我正在筛选查询结果。请用示例明确说明,因为建议的解决方案将起作用。我澄清了问题-建议的解决方案确实起作用。为什么您不想在子查询中引用它?因为我没有筛选表,我正在过滤一个查询的结果。请用这个例子来明确说明,因为建议的解决方案应该有效。我澄清了这个问题-建议的解决方案确实有效。这很有效。很抱歉我最初的困惑-做得好,谢谢@cgn。具有讽刺意味的是,bigquery文档对于窗口功能是否适用于聚合函数的定义并不明确。我认为,如果数据库足够强大,能够支持行数和延迟,那么它必须。另外,我认为它是为响应hive而设计的,并且hive确实支持此功能。感谢Gordon提供了很好的解决方案,我将确保更新有关窗口功能的文档。P.S.BigQuery不是为响应蜂巢而设计的:@MoshaPasumansky。我以前从未说过这句话,所以我很容易不再重复。我确实发现这两种方法之间有很多相似之处,从SQL的角度来看,似乎一种方法启发了另一种方法。干杯。@GordonLinoff感谢你的洞察力——我同意你提到的hive的相似之处,但我在应用方面经验不足——感谢你给出了一个非常明确的答案:这很有效。很抱歉我最初的困惑-做得好,谢谢@cgn。具有讽刺意味的是,bigquery文档对于窗口功能是否适用于聚合函数的定义并不明确。我认为,如果数据库足够强大,能够支持行数和延迟,那么它必须。另外,我认为它是为响应hive而设计的,并且hive确实支持此功能。感谢Gordon提供了很好的解决方案,我将确保更新有关窗口功能的文档。P.S.BigQuery不是为响应蜂巢而设计的:@MoshaPasumansky。我以前从未说过这句话,所以我很容易不再重复。我确实发现这两种方法之间有很多相似之处,从SQL的角度来看,似乎一种方法启发了另一种方法。干杯。@GordonLinoff感谢您的洞察力-我同意您提到的hive的相似之处,但我在应用方面经验不足-感谢您提供了一个非常清晰的答案: