我有一张看起来像这样的桌子
id | segment_name
----------------------------------
1 | seg_1
----------------------------------
2 | seg_2
----------------------------------
1 | seg_2
----------------------------------
3 | seg_1
----------------------------------
1 | seg_3
我希望能够将2个segment_name
插入SQL语句中以查找唯一ID的数量。因此,例如,如果我在SQL中传递了seg_1
和seg_2
,则这是所需的输出:
count
----------------------------------
1
----------------------------------
我只计算属于我定义的2 segment names
的唯一ID。
最终,我正在寻找段重叠计数。
答案 0 :(得分:1)
对于您的原始问题,您只想要count(distinct)
:
select count(distinct id)
from t
where segment_name in ('seg_1', 'seg_2');
对于修订后的问题:
select count(*)
from (select id
from t
where segment_name in ('seg_1', 'seg_2')
group by id
having count(*) = 2
) i;
答案 1 :(得分:1)
这是您需要的查询吗?
select count(distinct id)
from t
where segment_name in ('seg_1', 'seg_2')
您更改了问题。我认为此查询将回答新的查询:
select count(distinct a.id)
from (
select id from t where segment_name = 'seg_1'
) a join (
select id from t where segment_name = 'seg_2'
) b on a.id = b.id
答案 2 :(得分:0)
BigQuery Standard SQL的另一个选项
date
它使用分析功能代替分组或自加入