我在sql plus查询中使用count()函数时遇到问题..比如说
SELECT B.ID COUNT(S.BRANCH_ID) FROM BRANCH B
INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
GROUP BY B.ID;
从这样做我将得到结果
b.id count
1 6
2 6
3 6
4 7
5 6
这很好..但是如果我甚至添加一个额外的内部联接,我会得到完全不同的错误结果..所以如果我举个例子..
SELECT COUNT(S.BRANCH_ID) FROM BRANCH B
INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID
GROUP BY B.ID;
现在我得到的结果将是......
b.id count
1 96
2 96
3 96
4 112
5 96
为什么这样,我该如何阻止它?干杯!
答案 0 :(得分:1)
尝试
SELECT B.ID, COUNT(DISTINCT S.STAFF_ID) FROM BRANCH B
INNER JOIN STAFF S ON S.BRANCH_ID = B.ID
INNER JOIN TOOL_STOCK TS ON TS.BRANCH_ID = B.ID
GROUP BY B.ID;
用STAFF表中的主键字段替换S.STAFF_ID。
您的问题是COUNT函数在连接并返回所有行后返回与GROUP BY子句匹配的行数。
在您的初始查询中,您将找到每个分支的员工数量。在第二个分支中,员工数量乘以库存项目数。
答案 1 :(得分:1)
当您添加第二个联接时,您将获得每个分支的STAFF + TOOLS计数。
如果您想要返回所有数据,则可能需要添加子查询,但只需要计算一种记录类型。
我认为你问题的关键在于,你实际上想要算什么呢?