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