用WHERE AND子句计算唯一记录?

时间:2019-05-12 22:04:25

标签: sql google-bigquery

我有一张看起来像这样的桌子


    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_1seg_2,则这是所需的输出:

    count     
    ----------------------------------
    1        
    ----------------------------------

我只计算属于我定义的2 segment names的唯一ID。

最终,我正在寻找段重叠计数。

3 个答案:

答案 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

它使用分析功能代替分组或自加入