PostgreSQL - count data as zero if it is null (when where clause is used)

孤街醉人 提交于 2019-12-01 07:00:37

Your where condition on the outer joined table turns the outer join into an inner join (because the "non-existing rows will have a NULL value and the comparison of NULL with something else yields "undefined" and thus will remove that row from the result)

You need to move that condition into the join condition:

SELECT opp.name as name,
       count(log.stage_id) as stage_count
FROM crm_lead as opp 
  LEFT JOIN crm_lead_stage_log as log 
         ON opp.id = log.opportunity_id
        AND log.create_date > '2014-01-28 08:49:03'
GROUP BY name;

If you want return zero when the result is null, you can use the comand 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

It return "0" when count get a null value.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!