微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql-合并两个选择查询,如果没有值,则在列中添加零

嗨Team am newbie to sql

我有两个这样的选择查询

select fv.value as primary_hod, count(*) as closed
from artifact a, item i, field_value fv
where i.id=a.id and i.folder_id = 'tracker1127' and fv.id = a.fv_0
  and a.close_date is not NULL  and i.date_created > i.date_created - INTERVAL '30 days'
group by fv.value;

这回来了

 primary_hod    | closed
------------------+--------
 Sivaramakrishnan |      1

查询

select fv.value as primary_hod, count(*) as Open
from artifact a, item i, field_value fv
where i.id=a.id and i.folder_id = 'tracker1127' and fv.id=a.fv_0
  and a.close_date is NULL and i.date_created > i.date_created - INTERVAL '30 days'
group by fv.value;

这返回

   primary_hod    | open
------------------+------
 Sivaramakrishnan |    1
 Anand            |    2
 Manav            |    1
 Prasanna         |    1

我想要这样的东西

  primary_hod    | open | Closed
------------------+------+
 Sivaramakrishnan |    1 | 1
 Anand            |    2 | 0
 Manav            |    1 | 0
 Prasanna         |    1 | 0

我尝试了工会和工会,但运气不好,请对此进行说明

解决方法:

使用CASE表达式进行条件计数:

select fv.value as primary_hod,
       count(case when a.close_date is NULL then 1 end) as open,
       count(case when a.close_date is not NULL then 1 end) as closed
from artifact a, item i, field_value fv
where i.id=a.id and i.folder_id = 'tracker1127' and fv.id = a.fv_0
  and i.date_created > i.date_created - INTERVAL '30 days'
group by fv.value;

用现代的,显式的JOIN语法重新编写:

select fv.value as primary_hod,
       count(case when a.close_date is NULL then 1 end) as open,
       count(case when a.close_date is not NULL then 1 end) as closed
from artifact a
  join item i on i.id = a.id
  join field_value fv on fv.id = a.fv_0
where i.folder_id = 'tracker1127' 
  and i.date_created > i.date_created - INTERVAL '30 days'
group by fv.value;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐