假设我有以下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语句的任何想法吗?
非常感谢。
答案 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