我有一个类似这样的 mySQL 查询:
SELECT c1, c2 FROM a WHERE a.c3 = 123
我有第二个查询,我需要为 c2 的每个值执行,如下所示:
SELECT COUNT(*) AS `Counter` FROM a WHERE a.c2 = [each value of a.c2]
目前,我以编程方式遍历第一个查询的每个结果并执行第二个查询。所以,发生的事情是主查询使用 c3 的特定值来生成结果集。然后,第二个查询使用该结果集并对 c2 的每个返回值进行 COUNT,而对 c3 的值没有任何限制。
是否可以重写第一个查询,以便它也返回聚合结果Counter
?换句话说,我想最终得到一个包含c1, c2, Counter
.
我尝试编写子查询,但这不起作用:
SELECT c1, c2,
(SELECT COUNT(*) AS `Counter` FROM a)
FROM a WHERE a.c3 = 123
(我不知道如何让 WHERE 子句使用从“主”查询中检索到的值。)
我正在使用一个使用 mySQL 4.1 的旧应用程序。
编辑以显示数据和所需的结果:
假设该表a
如下所示:
| c1 | c2 | |++++++++++++| | 222 | 101 | | 223 | 101 | | 224 | 101 | | 222 | 102 | | 223 | 102 |
给定 c2 的指定值,我找到 c1 的所有匹配值。所以,如果c2=101
:
| c1 | |+++++| | 222 | | 223 | | 224 |
现在,对于这 3 个值中的每一个,我想要Count
该值出现在完整表中的次数a
:
| c1 | 计数 | |++++++++++++++| | 222 | 2 | | 223 | 2 | | 224 | 1 |