Oracle SQL:LEFT JOIN - > GROUP BY COUNT(*)没有错误的计数金额

时间:2015-12-15 16:04:50

标签: sql oracle

我有这个SQL查询,这让我有点挣扎。

SELECT c.Threat_Type, COUNT(*) FROM BORE.NormalToilet c
   LEFT JOIN BORE.EnragedToilet p on p.Toilet_ID = c.Toilet_ID
GROUP BY c.Threat_Type

这是输出:

+--------------+--------+
| Threat Type  |  Count |
+--------------+--------+
| Portable     |   26   |
| Japanese     |    1   |
| Toilet       |    1   |
| Assassin     |    3   |
+--------------+--------+

现在问题是这个问题:

  1. 我们的便携式厕所固件中有26个漏洞。
  2. 在我们的日本厕所中,错误列出了1个漏洞......没有漏洞,只有请求的功能。这应该是0,而不是1
  3. 与上述问题相同:厕所功能没有漏洞。
  4. 如果我尝试使用INNER JOIN,则不会包含1字段。这是正确的行为(因为没有匹配项),但是,我希望它说0而不是1。使用LEFT JOIN,它只是说1,这是非常不正确的。

    我做错了什么?

1 个答案:

答案 0 :(得分:1)

在评论中归功于a_horse_with_no_name和vkp。如果他们最终发布了自己的答案,请随时投票删除此答案。

而不是count(*)计算,而不是count(p.Toilet_ID),它只计算p.Toilet_ID is not null的行数。