首页 > 解决方案 > 根据 Id 获取每个状态的计数

问题描述

我有一个名为的主表和一个名为的mail_recievers_master子表mail_recievers。common_id 是primary key主表和foreign子表中的键。

我可以通过使用获取主详细信息

select * 
from mail_recievers_master

通过此查询,我们将获得主表中的所有详细信息。这可以。

正如我们所知,主表将有一个记录,common_id并且在子表中将有多个记录common_id,因为子表包含邮件接收者。

在子表mail_recievers中,我将有状态列,我将存储天气邮件sentInvalidbouncedInitiated我将存储。

插入记录时的状态将是Initiated退回时的状态将是bounced发送邮件时的状态 sent。所以我可能只有sent状态记录或 Sent使用Bouncedor sent, bounced, Initiated

在这里,我的要求是我需要获取主表的所有详细信息,并且基于个人common_id我需要获取所有状态的计数。

可能有一个或多个状态,common_id我需要计算所有状态。

标签: sqlpostgresql

解决方案


您可能正在寻找条件聚合,在一行中显示每封邮件的所有计数。

select * 
from mail_recievers_master mrm
left join
(
  select
    common_id,
    count(*) filter (where status = 'sent') as sent,
    count(*) filter (where status = 'invalid') as invalid,
    count(*) filter (where status = 'bounced') as bounced,
    count(*) filter (where status = 'initiated') as initiated
  from mail_recievers
  group by common_id
) mr on mr.common_id = mrm.common_id
order by mrm.common_id;

推荐阅读