现在我有这个查询:
SELECT
opp.name as name,
count(log.stage_id) as stage_count
FROM
crm_lead as opp LEFT OUTER JOIN crm_lead_stage_log as log ON (opp.id = log.opportunity_id)
GROUP BY
name
它输出这个结果:
name | stage_count |
name1 | 2
name2 | 1
name3 | 0
它输出我需要的。但是如果我给它加上任何条件,它就会跳过计数为零的行,我需要能够看到这些行。 例如,如果我写这个查询:
SELECT
opp.name as name,
count(log.stage_id) as stage_count
FROM
crm_lead as opp LEFT OUTER JOIN crm_lead_stage_log as log ON (opp.id = log.opportunity_id)
WHERE WHEN log.create_date > '2014-01-28 08:49:03'
GROUP BY
name
然后它输出这个:
name | stage_count |
name1 | 1
它会正确计算该时间间隔内的现有阶段数,但会跳过该时间间隔内不存在的阶段数的行。我怎样才能让它像这样输出(在那个例子中,只有第一行的一个阶段被计算在新查询的那个时间间隔内,对于其他行,它计数为零,因为它不存在):
name | stage_count |
name1 | 1
name2 | 0
name3 | 0
这样可以吗? 附言如果需要更多信息,例如将此查询示例放在网上查看,只需发表评论,我会更新我的答案)。
最佳答案
如果要在结果为空时返回零,可以使用命令 COALESCE。
SELECT
opp.name AS name,
COALESCE(COUNT(log.stage_id),0) AS stage_count
FROM
crm_lead AS opp LEFT OUTER JOIN crm_lead_stage_log AS log ON (opp.id = log.opportunity_id)
GROUP BY name
当计数为空值时返回“0”。
关于sql - 如果使用 where 子句时数据为空,则将数据计为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21405207/