使用子选择进行计数,产生双倍的数量
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
关系。用上面的替换你的子查询应该会给你正确的答案
我是 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
关系。用上面的替换你的子查询应该会给你正确的答案