【问题标题】:How to Join multipe queries result in one query result如何加入多个查询导致一个查询结果
【发布时间】:2021-02-07 00:39:40
【问题描述】:

如果您能帮助我们以下主题,我将非常感激:

select z1.nature_projet as typeCredit,COUNT(z1.nature_projet) as nbreTotalRejete, SUM(z1.montant_emprunt) as totalMontantRejete                                                 
FROM (
select * from dossier
where (EXTRACT(MONTH FROM date_affectation_banque ) = EXTRACT(MONTH FROM now())) and partner_id=1 and statut_dossier='Envoye'
) z1
where banque_statut_dossier='Rejete'
group by nature_projet**

下图描述了结果:

select  z1.nature_projet as typeCredit,COUNT(z1.nature_projet) as nbreTotalAccorde, SUM(z1.montant_emprunt) as totalMontantAccorde                                                          
FROM (
select * from dossier
where (EXTRACT(MONTH FROM date_affectation_banque ) = EXTRACT(MONTH FROM now())) and partner_id=1 and statut_dossier='Envoye'
) z1
where banque_statut_dossier='Accorde'
group by nature_projet

下图描述了结果:

SELECT z1.nature_projet as typeCredit,  
COUNT(z1.nature_projet) as nbreTotal, SUM(z1.montant_emprunt) as totalMontant                                                           
FROM (
select * from dossier
where (EXTRACT(MONTH FROM date_affectation_banque ) = EXTRACT(MONTH FROM now())) and partner_id=1 and statut_dossier='Envoye'
) z1
group by nature_projet

下图描述了结果:

我想将前两个查询的结果与最后一个查询的结果合二为一,因此结果列将如下所示:

TypeCredit,totalNbre,totalMontant,TotalNbreAccorde,TotalMontantAccorde,TottalNbreRejete,TotalMontantRejete

【问题讨论】:

    标签: sql postgresql count sum pivot


    【解决方案1】:

    您可以进行条件聚合。考虑:

    select nature_projet, 
        count(*)             filter(where banque_statut_dossier = 'Rejete' ) cnt_rejete,
        count(*)             filter(where banque_statut_dossier = 'Accorde') cnt_accorde,
        count(*)             filter(where banque_statut_dossier = 'Envoye' ) cnt_envoye,
        sum(montant_emprunt) filter(where banque_statut_dossier = 'Rejete' ) montant_rejete,
        sum(montant_emprunt) filter(where banque_statut_dossier = 'Accorde') montant_accorde,
        sum(montant_emprunt) filter(where banque_statut_dossier = 'Envoye' ) montant_envoye
    from dossier
    where 
        partner_id = 1
        and banque_statut_dossier in ('Rejete', 'Accorde', 'Envoye')
        and date_affectation_banque >= date_trunc('month', current_date) 
        and date_affectation_banque <  date_trunc('month', current_date) + interval '1 month'
    group by nature_projet
    

    请注意,我更改了日期过滤逻辑;您似乎打算过滤当前月份,而上述表达式使用针对半开间隔的直接过滤,比您依赖日期函数的原始策略更有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2021-03-02
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多