PostgreSQL – 如果为null,则将数据计为零(使用where子句时)
发布时间:2020-12-13 16:04:59 所属栏目:百科 来源:网络整理
导读:现在我有这个查询: SELECT opp.name as name,count(log.stage_id) as stage_countFROM crm_lead as opp LEFT OUTER JOIN crm_lead_stage_log as log ON (opp.id = log.opportunity_id)GROUP BYname 并输出以下结果: name | stage_count |name1 | 2name2 |
现在我有这个查询:
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 它正确计算该时间间隔内的现有阶段编号,但它会跳过时间inerval中不存在阶段编号的行.我怎样才能使它像这样输出(在该示例中,第一行的一个阶段在新的查询的时间间隔内计算,对于其他行,它计为零,因为它不存在): name | stage_count | name1 | 1 name2 | 0 name3 | 0 有可能这样做吗? 解决方法
外部联接表上的where条件将外部联接转换为内部联接(因为“不存在的行将具有NULL值,并且NULL与其他内容的比较会产生”undefined“,因此将从结果中删除该行)
您需要将该条件移动到连接条件中: 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |