如何计算具有2个条件的数据库记录。
这是图片:
我想计算只有条件12 & 18的帖子。因此,在第11篇之后我应该将计数器设置为值1.第5,6,7,9,10号帖子不应该被计算,因为条件12& 18不要出现。
在这里得到的想法是一个查询:
SELECT COUNT(post) from post_condition
where `condition`=18 AND `condition`=12
但这是错误的,我尝试了一些子查询但没有成功。
答案 0 :(得分:2)
试试这个:
SELECT COUNT(post)
FROM table
WHERE condition IN (12, 18)
GROUP BY post
HAVING COUNT(DISTINCT(condition)) = 2;
答案 1 :(得分:2)
如果你想计算两者兼有的数字,那么你可以使用子查询生成匹配的帖子:
SELECT COUNT(*)
FROM (SELECT pc.post
FROM post_condition pc
WHERE pc.condition IN (12, 18)
GROUP BY pc.post
HAVING COUNT(pc.condition) = 2 -- assumes no duplicates
) t;
你可以在没有子查询的情况下做这个,如果你有一个帖子表(我怀疑是真的:
select count(*)
from posts p
where exists (select 1 from post_condition pc where pc.post = p.post and pc.condition = 12) and
exists (select 1 from post_condition pc where pc.post = p.post and pc.condition = 18);
使用post_condition(post, condition)
上的索引,这可能是最快的方法。只有当许多帖子在post_condition
中没有任何行时,这种情况才会变慢。