标题有点模糊,就这样吧。
我有一张桌子:tag_tasks
它是一个具有两列重要性的连接表:tag_id
和task_id
我想计算具有两个标签的任务数。
例如:我有一个task(id = 12)
和一个tag(id = 24
和另一个tag(id = 30)
在 tag_tasks 我会有这些记录:
tag_id task_id
24 12
30 12
假设那里还有一些记录可以使它变得现实:
tag_id task_id
24 12
30 12
36 43
24 45
56 98
24 115
30 115
仅当 task_id 与我的两个目标标签都关联时,我才想返回记录。在这种情况下,只有前两行 (task_id = 12) 和最后两行 (task_id = 115),然后得到一个总数(在这种情况下,我的最终目标是返回数字 4)。
编辑 - 结果集
tag_id task_id
24 12
30 12
24 115
30 115
但最后我想得到这样的结果(上述结果的总和):
task_count_for_both_tags_combined
4
这对我来说有点令人困惑,所以如果我能澄清我的问题,请告诉我。
谢谢你。
编辑 - 到目前为止我的结果 这段代码让我很接近,但我需要添加结果数字 - *请注意,这只是当前数据集,可能有任意数量的行,我按 task_id 分组*
SELECT COUNT( task_id ) AS task_count, tag_id
FROM `tag_tasks`
WHERE tag_id
IN ( 15, 11 )
GROUP BY task_id
HAVING task_count >1
这给我留下了这个结果,我需要以下总和:
task_count task_id
2 34
2 45
编辑 - SQLFIDDLE 示例 我刚刚了解到这存在,所以这里是来自一张海报的不正确的小提琴答案,其数据集稍大。这个 sql 最终选择了与我想要的标签不同的记录(31 和 32 而不是 JUST 24 和 30)。