使用子选择进行计数,产生双倍的数量

Count with a subselect yielding double the amount

我是 SQL 的新手。

问题:假设我要计算 "x" COUNT(x.xValue) 的别名 table 中包含的金额为 217 . 现在当我添加子查询 "y" 然后再次计数时,我有 COUNT(x.xValue) 突然平方它自己 -> 47089. 为什么会这样?

(注意:别名 tables "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

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

这将表现为从 table x 中选择一个值并将其与 table y 中的每个值匹配。这显然会产生 平方 return 效果。

您需要使用的是 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'

以上查询应该 return 您正在寻找的正确 1 to 1 关系。用上面的替换你的子查询应该会给你正确的答案