遇到SQL COUNT问题

Fio*_*ite 1 sql group-by sql-server-2005 count

我正在使用MS SQL 2008,我有一个状态表(id,name)和一个项目表(id,name,statusid,deleted).

我想计算每个状态的项目数,并具有以下查询:

SELECT status.id,
ISNULL(COUNT (items.name), 0) AS 'count'
FROM status
LEFT OUTER JOIN items
ON items.statusid = status.id
GROUP BY status.id
Run Code Online (Sandbox Code Playgroud)

复杂的是我希望获得所有状态,如果没有状态项,则为0.

上面的工作正常,但是当我加入时WHERE items.deleted = 0,它不再显示其中带有0的行.

为什么该WHERE子句会杀死我的查询?我怀疑我的方法可能有误......

谢谢 :)

Qua*_*noi 5

SELECT  status.id,
        COUNT (items.statusid) AS 'count'
FROM    status
LEFT OUTER JOIN
        items
ON      items.statusid = status.id
        AND items.deleted = 0
GROUP BY
        status.id
Run Code Online (Sandbox Code Playgroud)

为什么该WHERE子句会杀死我的查询?我怀疑我的方法可能有误......

因为如果没有给定的项目statusid,则LEFT JOIN返回一行,并将所有项目字段设置为NULL.

你的WHERE子句将这些行过滤掉(NULL = 0返回NULL)并且它们不会进入GROUP BY.

还要注意ISNULLon COUNT是无用的:COUNT永远不会返回NULL值.它只是不计算NULLs,因此将一个作为JOIN子句一部分的列放入COUNTwil就可以了.