用子选择计数产生两倍的量

时间:2015-03-09 16:07:00

标签: mysql count subquery

我是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

1 个答案:

答案 0 :(得分:0)

问题是您正在执行两个子查询,然后尝试直接调用值返回。

这将表从表x中选择一个值并将其与表y中的每个值相匹配。这显然会创建平方返回效果。

您需要使用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关系。用上面的查询替换你的子查询应该给你正确的答案