Mysql 获取多个子查询结果的总和

Mysql 获取多个子查询结果的总和,mysql,sql,Mysql,Sql,我的查询选择与用户id匹配的所有标记,然后针对每个标记,检查其他特定用户是否具有相同的标记(用户具有多个标记)。以下是我目前拥有的: SELECT name as tname, ( SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101' ) as count FROM tags WHERE user_id = '102' 输出是一个标记列表,如果存在匹配项,则“count”为1,如果不存在匹配项,则为0。看起来

我的查询选择与用户id匹配的所有标记,然后针对每个标记,检查其他特定用户是否具有相同的标记(用户具有多个标记)。以下是我目前拥有的:

SELECT name as tname,
(
SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
) as count
FROM tags
WHERE user_id = '102'
输出是一个标记列表,如果存在匹配项,则“count”为1,如果不存在匹配项,则为0。看起来是这样的:

+--------+-------+
| tname  | count |
+--------+-------+
| Apple  |     1 |
| Banana |     1 |
| Orange |     1 |
| Peach  |     0 |
| Pear   |     1 |
+--------+-------+
SELECT sum( count ) as total_count, class FROM table where count > 3 GROUP BY class
+--------+-------+
| id     | count |
+--------+-------+
| 102    |     4 |
| 103    |     3 |
| 104    |     7 |
| 105    |     2 |
| 106    |     4 |
+--------+-------+
SELECT SUM(count)
FROM (
     SELECT name as tname,
     (
     SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
     ) as count
     FROM tags
     WHERE user_id = '102'
     )
所有信息都在那里,但我想得到所有匹配项的总和(在本例中为4)。然后,我将在另一个查询中使用所有这些,这样我就可以有这样一个查询:

+--------+-------+
| tname  | count |
+--------+-------+
| Apple  |     1 |
| Banana |     1 |
| Orange |     1 |
| Peach  |     0 |
| Pear   |     1 |
+--------+-------+
SELECT sum( count ) as total_count, class FROM table where count > 3 GROUP BY class
+--------+-------+
| id     | count |
+--------+-------+
| 102    |     4 |
| 103    |     3 |
| 104    |     7 |
| 105    |     2 |
| 106    |     4 |
+--------+-------+
SELECT SUM(count)
FROM (
     SELECT name as tname,
     (
     SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
     ) as count
     FROM tags
     WHERE user_id = '102'
     )
非常感谢您的帮助

更新:

最后,我使用以下查询得到4的和:

SELECT SUM(count) as count
FROM (
     SELECT name as tname,
     (
     SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
     ) as count
     FROM tags
     WHERE user_id = '102'
     ) as t
这很好,但这只是我想要实现的前一半。我仍然无法将此计数查询包装到另一个查询中(最终生成所有用户ID和相应计数的列表)。我最终使用了Hang的答案,因为它对我当前的查询进行了最小的更改,并且我无法找到使用Gordon Linoff的答案得到相同结果的方法(因为我缺乏理解)。我期望的结果如下所示:

+--------+-------+
| tname  | count |
+--------+-------+
| Apple  |     1 |
| Banana |     1 |
| Orange |     1 |
| Peach  |     0 |
| Pear   |     1 |
+--------+-------+
SELECT sum( count ) as total_count, class FROM table where count > 3 GROUP BY class
+--------+-------+
| id     | count |
+--------+-------+
| 102    |     4 |
| 103    |     3 |
| 104    |     7 |
| 105    |     2 |
| 106    |     4 |
+--------+-------+
SELECT SUM(count)
FROM (
     SELECT name as tname,
     (
     SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
     ) as count
     FROM tags
     WHERE user_id = '102'
     )

我想“从用户中选择id”,对于每个用户,使用更新的子查询获取计数,用每个用户的id替换“102”。如果我所说的需要澄清,请询问!再次感谢你的帮助

如果我理解正确,您需要用户101和用户102的标签计数。您可以通过加入
来实现这一点:

select count(*)
from tags t101 join
     tags t102
     on t101.tag = t102.tag and
        t101.user_id = 101 and
        t102.user_id = 102;
这假定表中没有重复项。如果有,则使用
选择计数(distinct t101.tag)

顺便说一下,您可以在同一个查询中使用稍微不同的方法获得匹配的标记:

select t101.tag, count(t102.user_id)
from tags t101 left join
     tags t102
     on t101.tag = t102.tag and
        t102.user_id = 102
where t101.user_id = 101
group by t101.tag;

在查询外部包装一个SELECT,如下所示:

+--------+-------+
| tname  | count |
+--------+-------+
| Apple  |     1 |
| Banana |     1 |
| Orange |     1 |
| Peach  |     0 |
| Pear   |     1 |
+--------+-------+
SELECT sum( count ) as total_count, class FROM table where count > 3 GROUP BY class
+--------+-------+
| id     | count |
+--------+-------+
| 102    |     4 |
| 103    |     3 |
| 104    |     7 |
| 105    |     2 |
| 106    |     4 |
+--------+-------+
SELECT SUM(count)
FROM (
     SELECT name as tname,
     (
     SELECT COUNT(*) FROM tags WHERE tags.name = tname AND user_id = '101'
     ) as count
     FROM tags
     WHERE user_id = '102'
     )

你预期的结果是什么?用户Id为102,计数为4?对您的答案稍作更改,我得到了我想要的总数,但我仍然不知道如何在其他查询中使用它。我编辑了我的问题以便澄清。您答案中的第二个问题确实提供了与我开始时相同的结果,但我不太理解格式,无法使其适用于我。