我是SQL新手。
问题:假设我将“x”COUNT(x.xValue)
的别名表中包含的金额计算为217。现在,当我添加子查询“y”并再次进行计数时,我有了COUNT(x.xValue)
来突然调整其自身->47089。为什么会这样?
(注意:别名表“x”和“y”的数量相同->217。)
我该如何解决这个问题。我不想使用变量或视图。
SELECT COUNT(x.xValue) + COUNT(y.yValue) AS CountXY
FROM
(SELECT value AS xValue FROM table1
WHERE
...) AS x,
(SELECT value AS yValue FROM table1
WHERE
...) AS y
“CountXY”的结果:94178。
结果我期望“CountXY”:434
最佳答案
问题是,您正在执行两个子查询,然后尝试直接调用值返回。
这将表现为从tablex
中选择一个值并将其与tabley
中的每个值匹配。这显然会产生平方返回效应。
您需要使用JOIN
来组合这两个数据集,以便获得您试图实现的1 to 1
关系。
以上是对上一个子查询的处理方法:
SELECT COUNT(A.value) AS x, COUNT(B.value) AS y
FROM table1 AS A
JOIN table1 AS B
ON A.attr1 = B.attr1
AND A.attr2 = B.attr2
WHERE B.attr1 != 'whatever'
AND B.attr2 = 'whatever'
AND A.attr3 = 'something'
AND B.attr3 = 'something different'
上面的查询应该返回您正在寻找的正确的
1 to 1
关系。用上面的子查询替换子查询应该会给出正确的答案关于mysql - 用子选择计数产生两倍的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28946589/