我无法提取确切的计数

时间:2014-02-27 07:37:53

标签: sqlite

当我尝试加入时,我遇到了问题 以下是我的数据库。

rank (id, name)
-----------------
id   |   name
1        CEO
2        CTO
3        Employee
4        Manager

user (id, position)
-----------------
id   |   position
1         2
2         2
3         3
4         3

sql>

SELECT rank.id, rank.name, count(*) 
      FROM rank
      LEFT JOIN user
      ON rank.id = user.position
      GROUP BY rank.name

在这种情况下,我有一个像

这样的答案
id    |   name      |   count(*)
1         CEO            1
2         CTO            2
3         Employee       2
4         Manager        1

为什么CEOManager被计为'1'?

我认为它应该是'0'。

2 个答案:

答案 0 :(得分:0)

只要表用户没有匹配,左外连接就会为您提供一个空记录,因此您得到的计数为1而不是0。

这是一个有效的选择声明:

SELECT id, name, (select count(*) from user where user.position = rank.id) as cnt
FROM rank;

编辑:顺便说一下,如果您计算了一个用户字段,那么您的语句也会起作用,因为不会计算NULL值。因此,您将使用COUNT(user.position)而不是COUNT(*)。但是,为了简单和可读性,我更喜欢我的陈述。

答案 1 :(得分:0)

左连接为您提供左表中的所有行,无论它们是否与正确的行匹配。因为你算数(*)它也计算空数。你可以改为计数(位置),这对我有用。