Mysql 获取多个子查询结果的总和
我的查询选择与用户id匹配的所有标记,然后针对每个标记,检查其他特定用户是否具有相同的标记(用户具有多个标记)。以下是我目前拥有的: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。看起来
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?对您的答案稍作更改,我得到了我想要的总数,但我仍然不知道如何在其他查询中使用它。我编辑了我的问题以便澄清。您答案中的第二个问题确实提供了与我开始时相同的结果,但我不太理解格式,无法使其适用于我。