嗨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] 举报,一经查实,本站将立刻删除。