带有Count,Sum和JOIN的SQL查询

时间:2012-12-18 15:34:55

标签: sql join count

我通过帖子筛选找到问题的答案,但我没有运气。所以我想我会创建一个新的,看看社区是否能够帮助我!如果我在描述事情时没有使用正确的SQL术语,请原谅我。

这个问题有三个表。表A是没有依赖关系的“主”表。表B具有表A的外键引用。表C具有表B的外键引用。

此查询有两个目标。首先是在表C中总结一个字段,比如fieldC,唯一必须满足的条件是A中的字段,比如fieldA,必须等于,比方说X.公平地说,这个解决方案很简单:

SELECT Sum(C.fieldC) FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

好的,现在第二个目标:我想计算表A中与fieldA = X匹配的行数。我试过这个:

SELECT Sum(C.fieldC), Count(A.id) FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

但是我的总数还有很多。我在这里犯了一些明显的错误吗?感谢大家的帮助! =)

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用count distinct修复问题:

SELECT Sum(C.fieldC), Count(distinct A.id)
FROM C
  INNER JOIN B
    ON C.foreign_keyB = B.id
  INNER JOIN A
    ON B.foreign_keyA = A.id
  WHERE fieldA = X

如果你想对A中的字段进行其他操作,例如平均值或总和,那么解决方案会有点复杂。