COUNT个DISTINCT ID,但仅限于表中存在多个记录

时间:2011-01-04 20:48:00

标签: sql mysql

假设我有以下MySQL表:

id  tagid  campaignid
1   10     1000
2   11     1000 
3   12     1000
4   13     1000
5   12     2000
6   13     2000
7   12     3000
7   12     4000

我需要计算DISTINCT campaignid的数量,但仅限于多个tagids的记录。

例如,当所有以下标记存在记录时,计算唯一的活动数量的数量 - 10,11和10。 12.在这种情况下,结果将是1的计数(只有campaignid 1000具有所有这些tagid的记录)

另一个例子,当tagid 12& 12的记录存在时,计算唯一的campaignid的数量。 13.在这种情况下,结果将是2的计数(campaignid 1000& 2000都有这两个标签的记录)。 campaignid 3000& 4000有tagid 12的记录,但不是tagid 13的记录,所以它们不包括在内。

我可以用来完成这个SQL语句的任何想法吗?

非常感谢。

3 个答案:

答案 0 :(得分:2)

Jack Maney使用Having

回答的简化版本
 SELECT Count(campaignid)
   FROM
    (SELECT  campaignid 
     FROM  table
     HAVING   count(tagid) > 1
     GROUP BY campaignid ) t

答案 1 :(得分:0)

只计算每个(id,tagid)对的campaignid,只计算此计数至少为2的行,然后执行最终计数:

select count(1) from
(
  select campaignid from
    (
    select id, tagid, count(campaignid) as freq
    from table
    group by id, tagid
    )
  join table using (id,tagid)
  where freq>=2
  group by campaignid
)

答案 2 :(得分:0)

假设您对tagID的特定列表的出现感兴趣,可能类似于以下内容:(免责声明:我使用的是Sql Server)

select count(campaignid)
from (
  select campaignid
  from table
  where tagid in (12, 13)        --change the list of tagids as desired
  group by campaignid
  having count(distinct tagid)=2 --this count should be the exact size of the tagid list above
  ) t