sql - 如果使用 where 子句时数据为空,则将数据计为零

标签 sql postgresql

现在我有这个查询:

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/

相关文章:

mysql - 如何使用MYSQL获取表中所有列的不同值

mysql - 编写一个 SQL 查询来计算每个客户的总购买金额

c# - 如何将数据从一个数据库导入到另一个数据库

sql - 楼层时间戳精确到秒

postgresql - 在内联数组上使用 postgresql 模糊运算符

mysql - 如何创建一个获取总金额的函数?

SQL 逻辑运算符

arrays - postgresql数组类型是否保留数组的顺序?

sql - 以逗号分隔列表形式返回结果的 PostgreSQL 查询

postgresql - 应用程序中非常不同的查询运行时间