标题有点模糊,就这样吧。
我有一个表: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 示例 我刚刚了解到这个存在,所以这是来自其中一位数据集稍大的海报的不正确的 fiddle 答案。此 sql 最终选择了与我想要的标签不同的记录(31 和 32 而不是 JUST 24 和 30)。
最佳答案
这样的事情对计数部分有用吗:
select 2*count(task_id) where task_id in (select task_id where tag_id=24) and task_id in (select task_id where tag_id=30)
基本上,如果任务有两个标签,则将其添加到计数中并在最后加倍。可以回收 where 子句以进行一般选择以获取其他数据。
关于mysql - SQL-从表中获取在两列中共享一个值的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553330/