Google BigQuery:如何按特定列的值频率过滤掉行



假设我只想返回一个列值至少出现两次的行。

我会写

SELECT 
table1.columnA
from table1
GROUP BY 
table1.columnA
HAVING COUNT(*) > 2

这只适用于一列,但如果我想返回几个列,但只对一个列应用过滤器,它就不起作用了。我的尝试是

SELECT 
table1.columnA,
table1.columnB,
from table1
GROUP BY 
table1.columnA
HAVING COUNT(*) > 2

给出一个既不是GROUPED也不是AGGREGATED的"错误。

从这篇文章中,似乎我需要在SELECT中对所有值进行分组或聚合,但我只有一个按一个特定列过滤

[10:13]

所以我仍然试图找出一种方法来过滤特定列的值频率。

可以使用窗函数计数频率,然后进行滤波。例如:

select distinct 
columnA,
columnB
from
(select 
*,
row_number() over(partition by columnA) as rn 
from table1)
where rn > 2

如果它仍然不适合你,请告诉我。

问题是,如果您只按列na分组,并且分组列a中的每一行都有多个值,则需要选择您想要的列b

MIN(colunsB) would take the smalest row in the group of columA. 

它将返回,因此对于分组列中的每一行只有一行columnb,最小的一行。

如果column中的每一行在columnb中只有一行

coluanA columnB
ab      cd
ab      cd
ab1     cd1
ab1     cd1
ab1     cd1

你应该让GROUP BY columnA,colmunB,因为它只会返回1行

分组的基本思想是要对其余的列进行聚合

如果您只想使用columnna过滤掉行的频率,下面的查询将是最简单的解决方案。

我猜分组不会在我的情况下工作,因为我只是试图用它来过滤列的频率

SELECT columnA, columnB
FROM table1
QUALIFY COUNT(*) OVER (PARTITION BY columnA) > 2

最新更新