如何将变量从子查询转移到外部查询-Postgres?

发布于 2025-02-10 15:21:18 字数 19496 浏览 3 评论 0原文

我在下面编写查询,如您所见,它有很多次数。我想从子查询到外部查询“ dolzniki_terjatve.datum_vlozitve”和“ dolzniki_terjatve.glavnica”,以便我不需要每次更改它们。我尝试了许多我在这里找到的解决方案,但似乎没有任何作用。有什么猜测吗?

select distinct on (upniki.naziv)
upniki.naziv, 
b.stevilo,  
b.glavnica_skupaj/b.stevilo as povprecna_glavnica, 
b.glavnica_skupaj,
coalesce(taksa_vlozitve,0)+coalesce(dodatna_taksa,0) as celotna_sodna_taksa,
coalesce(stroski,0)-coalesce(taksa_vlozitve,0)+ coalesce(dodatni_odvetniski,0)as vsi_odvetniski_stroski,
coalesce(stroski_izvrsitelja,0) as stroski_izvrsitelja,
coalesce(pravdni,0) as pravdni,
coalesce(glavnicapok,0)+coalesce(glavnicapokobresti,0) as pokrivanje_glavice_z_obrestmi,
coalesce(poksodnataksavlozitve,0)+coalesce(poksodnataksavlozitveobresti,0)+coalesce(pokdodatnasodnataksa,0)+coalesce(pokdodatnasodnataksaobresti,0) as pokrivanje_takse_z_obrestmi,
coalesce(pokodvstroskivlozitve,0)+coalesce(pokodvstroskivlozitveobresti,0)+coalesce(pokdodatniodvstroski,0)+coalesce(pokdodatniodvstroskiobresti,0) as pokrivanje_odvetniskih_z_obrestmi,
coalesce(pokstroskiizvrsitelja,0)+coalesce(pokstroskiizvrsiteljaobresti,0) as pokrivanje_stroskov_izvrsitelja_z_obrestmi,
coalesce(pokpravdnistroski,0)+coalesce(pokpravdnistroskiobresti,0) as pokrivanje_pravdnih_z_obrestmi,
((coalesce(glavnicapok,0)+coalesce(glavnicapokobresti,0))/b.glavnica_skupaj) as uspesnosti_glavnice,
((coalesce(poksodnataksavlozitve,0)+coalesce(poksodnataksavlozitveobresti,0)+coalesce(pokdodatnasodnataksa,0)+coalesce(pokdodatnasodnataksaobresti,0))/(coalesce(taksa_vlozitve,0)+coalesce(dodatna_taksa,1))) as uspesnosti_taks,
((coalesce(pokodvstroskivlozitve,0)+coalesce(pokodvstroskivlozitveobresti,0)+coalesce(pokdodatniodvstroski,0)+coalesce(pokdodatniodvstroskiobresti,0))/(coalesce(stroski,0)-coalesce(taksa_vlozitve,0)+coalesce(dodatni_odvetniski,1))) as uspesnosti_odvetniskih_stroskov,
((coalesce(pokstroskiizvrsitelja,0)+coalesce(pokstroskiizvrsiteljaobresti,0))/coalesce(stroski_izvrsitelja,1)) as uspesnosti_stroskov_izvrsitelja,
((coalesce(pokpravdnistroski,0)+coalesce(pokpravdnistroskiobresti,0))/coalesce(pravdni,1)) as uspesnosti_pravdni,
coalesce(a.pokrivanje,0) as pokrivanje_glavnice_z_vsemi_placili,
(coalesce(a.pokrivanje,0)/b.glavnica_skupaj) as procent,
coalesce(taksa_vlozitve,0) as taksa_vlozitve,
coalesce(stroski,0)-coalesce(taksa_vlozitve) as odv_stroski_vlozitve,
coalesce(dodatna_taksa,0) as dodatna_taksa,
coalesce(dodatni_odvetniski,0) as dodatni_odvetniski,
coalesce(stroski_izvrsitelja,0)as stroski_izvrsitelja,
coalesce(pravdni,0) as pravdni_stroski,
coalesce(glavnicapok,0) as glavnicapok,
coalesce(glavnicapokobresti,0) as glavnicapokobresti,
coalesce (poksodnataksavlozitve,0) as poksodnataksavlozitve,
coalesce(poksodnataksavlozitveobresti) as poksodnataksavlozitveobresti,
coalesce (pokodvstroskivlozitve,0) as pokodvstroskivlozitve,
coalesce(pokodvstroskivlozitveobresti,0) as pokoodvstroskivlozitveobresti,
coalesce(pokdodatnasodnataksa,0) as pokdodatnasodnataksa,
coalesce(pokdodatnasodnataksaobresti,0) as pokdodatnasodnataksaobresti,
coalesce(pokdodatniodvstroski,0) as pokdodatniodvstroski,
coalesce(pokdodatniodvstroskiobresti,0) as pokdodatniodvstroskiobresti,
coalesce(pokstroskiizvrsitelja,0) as pokstroskiizvrsitelja,
coalesce(pokstroskiizvrsiteljaobresti,0) as pokstroskiizvrsiteljaobresti,
coalesce(pokpravdnistroski,0) as pokpravdnistroski,
coalesce(pokpravdnistroskiobresti,0) as pokpravdnistroskiobresti
from dolzniki_terjatve
inner join paketi on dolzniki_terjatve.id_paket=paketi.id_paket
inner join upniki on paketi.id_upnik=upniki.id_upnik
left join (select paketi.id_upnik, coalesce(sum(znesek),0)-coalesce(sum(preplacilo),0) as pokrivanje
           from specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.referenca=dolzniki_terjatve.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and datumplacila <=date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           group by paketi.id_upnik) as a on paketi.id_upnik=a.id_upnik
left join (select paketi.id_upnik, count(referenca) as stevilo, sum(glavnica) as glavnica_skupaj, coalesce(sum(stroski_vlozitve),0) as stroski, coalesce(sum(sodna_taksa_vlozitve),1) as taksa_vlozitve 
           from dolzniki_terjatve, paketi
           where dolzniki_terjatve.id_paket=paketi.id_paket 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500  
           group by paketi.id_upnik) 
           as b on paketi.id_upnik=b.id_upnik
left join (select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabledodatnataksa on paketi.id_upnik=tabledodatnataksa.id_upnik
left join (select paketi.id_upnik, sum(znesek) as dodatni_odvetniski 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='2' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' and 
           datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabledodatniodv on paketi.id_upnik=tabledodatniodv.id_upnik
left join (select paketi.id_upnik, coalesce(sum(znesek),0) as stroski_izvrsitelja 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='3'
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tablestroskiizv on paketi.id_upnik=tablestroskiizv.id_upnik
left join (select paketi.id_upnik, sum(znesek) as pravdni 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='4'
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-06-01'
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month'
           group by paketi.id_upnik) as tablepravdni on paketi.id_upnik=tablepravdni.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as glavnicapok 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='1' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaglavnice on paketi.id_upnik=tabelaglavnice.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as glavnicapokobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='1' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaglavniceobresti on paketi.id_upnik=tabelaglavniceobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokodvstroskivlozitve 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='2' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaodvstroski on paketi.id_upnik=tabelaodvstroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokodvstroskivlozitveobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='2' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaodvstroskiobresti on paketi.id_upnik=tabelaodvstroskiobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as poksodnataksavlozitve 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='3' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelasodnataksavlozitve on paketi.id_upnik=tabelasodnataksavlozitve.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as poksodnataksavlozitveobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='3' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelasodnataksavlozitveobresti on paketi.id_upnik=tabelasodnataksavlozitveobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatnasodnataksa
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='1' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatnasodnataksa on paketi.id_upnik=tabeladodatnasodnataksa.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatnasodnataksaobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='1' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatnasodnataksaobresti on paketi.id_upnik=tabeladodatnasodnataksaobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatniodvstroski
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='2' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatniodvstroski on paketi.id_upnik=tabeladodatniodvstroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatniodvstroskiobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='2' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatniodvstroskiobresti on paketi.id_upnik=tabeladodatniodvstroskiobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokstroskiizvrsitelja
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='3' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelastroskiizvrsitelja on paketi.id_upnik=tabelastroskiizvrsitelja.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokstroskiizvrsiteljaobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='3' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelastroskiizvrsiteljaobresti on paketi.id_upnik=tabelastroskiizvrsiteljaobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokpravdnistroski
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='4' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelapravdnistroski on paketi.id_upnik=tabelapravdnistroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokpravdnistroskiobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='4' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelapravdnistroskiobresti on paketi.id_upnik=tabelapravdnistroskiobresti.id_upnik
where upniki.id_upnik in (131,141,1009, 1000)

I am writing query below and as you can see it has a lot of subqueries. I would like to throw out from subquery to outer query "dolzniki_terjatve.datum_vlozitve" and "dolzniki_terjatve.glavnica", so that I don't need to change them every time. I have tried many solutions which I have found here but nothing seems to work. Any guess?

select distinct on (upniki.naziv)
upniki.naziv, 
b.stevilo,  
b.glavnica_skupaj/b.stevilo as povprecna_glavnica, 
b.glavnica_skupaj,
coalesce(taksa_vlozitve,0)+coalesce(dodatna_taksa,0) as celotna_sodna_taksa,
coalesce(stroski,0)-coalesce(taksa_vlozitve,0)+ coalesce(dodatni_odvetniski,0)as vsi_odvetniski_stroski,
coalesce(stroski_izvrsitelja,0) as stroski_izvrsitelja,
coalesce(pravdni,0) as pravdni,
coalesce(glavnicapok,0)+coalesce(glavnicapokobresti,0) as pokrivanje_glavice_z_obrestmi,
coalesce(poksodnataksavlozitve,0)+coalesce(poksodnataksavlozitveobresti,0)+coalesce(pokdodatnasodnataksa,0)+coalesce(pokdodatnasodnataksaobresti,0) as pokrivanje_takse_z_obrestmi,
coalesce(pokodvstroskivlozitve,0)+coalesce(pokodvstroskivlozitveobresti,0)+coalesce(pokdodatniodvstroski,0)+coalesce(pokdodatniodvstroskiobresti,0) as pokrivanje_odvetniskih_z_obrestmi,
coalesce(pokstroskiizvrsitelja,0)+coalesce(pokstroskiizvrsiteljaobresti,0) as pokrivanje_stroskov_izvrsitelja_z_obrestmi,
coalesce(pokpravdnistroski,0)+coalesce(pokpravdnistroskiobresti,0) as pokrivanje_pravdnih_z_obrestmi,
((coalesce(glavnicapok,0)+coalesce(glavnicapokobresti,0))/b.glavnica_skupaj) as uspesnosti_glavnice,
((coalesce(poksodnataksavlozitve,0)+coalesce(poksodnataksavlozitveobresti,0)+coalesce(pokdodatnasodnataksa,0)+coalesce(pokdodatnasodnataksaobresti,0))/(coalesce(taksa_vlozitve,0)+coalesce(dodatna_taksa,1))) as uspesnosti_taks,
((coalesce(pokodvstroskivlozitve,0)+coalesce(pokodvstroskivlozitveobresti,0)+coalesce(pokdodatniodvstroski,0)+coalesce(pokdodatniodvstroskiobresti,0))/(coalesce(stroski,0)-coalesce(taksa_vlozitve,0)+coalesce(dodatni_odvetniski,1))) as uspesnosti_odvetniskih_stroskov,
((coalesce(pokstroskiizvrsitelja,0)+coalesce(pokstroskiizvrsiteljaobresti,0))/coalesce(stroski_izvrsitelja,1)) as uspesnosti_stroskov_izvrsitelja,
((coalesce(pokpravdnistroski,0)+coalesce(pokpravdnistroskiobresti,0))/coalesce(pravdni,1)) as uspesnosti_pravdni,
coalesce(a.pokrivanje,0) as pokrivanje_glavnice_z_vsemi_placili,
(coalesce(a.pokrivanje,0)/b.glavnica_skupaj) as procent,
coalesce(taksa_vlozitve,0) as taksa_vlozitve,
coalesce(stroski,0)-coalesce(taksa_vlozitve) as odv_stroski_vlozitve,
coalesce(dodatna_taksa,0) as dodatna_taksa,
coalesce(dodatni_odvetniski,0) as dodatni_odvetniski,
coalesce(stroski_izvrsitelja,0)as stroski_izvrsitelja,
coalesce(pravdni,0) as pravdni_stroski,
coalesce(glavnicapok,0) as glavnicapok,
coalesce(glavnicapokobresti,0) as glavnicapokobresti,
coalesce (poksodnataksavlozitve,0) as poksodnataksavlozitve,
coalesce(poksodnataksavlozitveobresti) as poksodnataksavlozitveobresti,
coalesce (pokodvstroskivlozitve,0) as pokodvstroskivlozitve,
coalesce(pokodvstroskivlozitveobresti,0) as pokoodvstroskivlozitveobresti,
coalesce(pokdodatnasodnataksa,0) as pokdodatnasodnataksa,
coalesce(pokdodatnasodnataksaobresti,0) as pokdodatnasodnataksaobresti,
coalesce(pokdodatniodvstroski,0) as pokdodatniodvstroski,
coalesce(pokdodatniodvstroskiobresti,0) as pokdodatniodvstroskiobresti,
coalesce(pokstroskiizvrsitelja,0) as pokstroskiizvrsitelja,
coalesce(pokstroskiizvrsiteljaobresti,0) as pokstroskiizvrsiteljaobresti,
coalesce(pokpravdnistroski,0) as pokpravdnistroski,
coalesce(pokpravdnistroskiobresti,0) as pokpravdnistroskiobresti
from dolzniki_terjatve
inner join paketi on dolzniki_terjatve.id_paket=paketi.id_paket
inner join upniki on paketi.id_upnik=upniki.id_upnik
left join (select paketi.id_upnik, coalesce(sum(znesek),0)-coalesce(sum(preplacilo),0) as pokrivanje
           from specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.referenca=dolzniki_terjatve.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and datumplacila <=date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           group by paketi.id_upnik) as a on paketi.id_upnik=a.id_upnik
left join (select paketi.id_upnik, count(referenca) as stevilo, sum(glavnica) as glavnica_skupaj, coalesce(sum(stroski_vlozitve),0) as stroski, coalesce(sum(sodna_taksa_vlozitve),1) as taksa_vlozitve 
           from dolzniki_terjatve, paketi
           where dolzniki_terjatve.id_paket=paketi.id_paket 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500  
           group by paketi.id_upnik) 
           as b on paketi.id_upnik=b.id_upnik
left join (select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabledodatnataksa on paketi.id_upnik=tabledodatnataksa.id_upnik
left join (select paketi.id_upnik, sum(znesek) as dodatni_odvetniski 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='2' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' and 
           datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabledodatniodv on paketi.id_upnik=tabledodatniodv.id_upnik
left join (select paketi.id_upnik, coalesce(sum(znesek),0) as stroski_izvrsitelja 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='3'
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01' 
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tablestroskiizv on paketi.id_upnik=tablestroskiizv.id_upnik
left join (select paketi.id_upnik, sum(znesek) as pravdni 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket
           and tip_stroskov='4'
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-06-01'
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month'
           group by paketi.id_upnik) as tablepravdni on paketi.id_upnik=tablepravdni.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as glavnicapok 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='1' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaglavnice on paketi.id_upnik=tabelaglavnice.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as glavnicapokobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='1' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaglavniceobresti on paketi.id_upnik=tabelaglavniceobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokodvstroskivlozitve 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='2' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaodvstroski on paketi.id_upnik=tabelaodvstroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokodvstroskivlozitveobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='2' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelaodvstroskiobresti on paketi.id_upnik=tabelaodvstroskiobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as poksodnataksavlozitve 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='3' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelasodnataksavlozitve on paketi.id_upnik=tabelasodnataksavlozitve.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as poksodnataksavlozitveobresti 
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavka='3' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelasodnataksavlozitveobresti on paketi.id_upnik=tabelasodnataksavlozitveobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatnasodnataksa
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='1' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatnasodnataksa on paketi.id_upnik=tabeladodatnasodnataksa.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatnasodnataksaobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='1' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatnasodnataksaobresti on paketi.id_upnik=tabeladodatnasodnataksaobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatniodvstroski
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='2' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatniodvstroski on paketi.id_upnik=tabeladodatniodvstroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokdodatniodvstroskiobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='2' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabeladodatniodvstroskiobresti on paketi.id_upnik=tabeladodatniodvstroskiobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokstroskiizvrsitelja
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='3' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelastroskiizvrsitelja on paketi.id_upnik=tabelastroskiizvrsitelja.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokstroskiizvrsiteljaobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='3' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelastroskiizvrsiteljaobresti on paketi.id_upnik=tabelastroskiizvrsiteljaobresti.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokpravdnistroski
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='4' and obresti=false
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelapravdnistroski on paketi.id_upnik=tabelapravdnistroski.id_upnik
left join (select paketi.id_upnik, sum(specifikacije_postavke.placilo) as pokpravdnistroskiobresti
           from specifikacije_postavke, specifikacije1, dolzniki_terjatve, paketi
           where specifikacije1.idizracun=specifikacije_postavke.idizracun and dolzniki_terjatve.referenca=specifikacije1.referenca and paketi.id_paket=dolzniki_terjatve.id_paket
           and postavkastroski='4' and obresti=true
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500 
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'
           and datumplacila <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik)
           as tabelapravdnistroskiobresti on paketi.id_upnik=tabelapravdnistroskiobresti.id_upnik
where upniki.id_upnik in (131,141,1009, 1000)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

聊慰 2025-02-17 15:21:18

我们可以使用截面定义参数,并在子Quearies

简单示例

with 
  params as (select 1 param_from, 1 param_to)
select header_id, count(*) from position, params
where position.header_id between param_from and param_to
group by header_id

db小提琴可以使用

查询重构后的

with 
  params as (select '2018-06-01'::timestamp p_datum_vlozitve_from, '2019-01-01'::timestamp  p_datum_vlozitve_to)
select distinct on (upniki.naziv)
upniki.naziv, 
b.stevilo, 
.......  original query  .....

查询,而不是constans,可以使用参数查询的值。

例如,在

select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik

中> p_datum_vlozitve_to 而不是2019-01-01

select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi, param 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >=p_datum_vlozitve_from and dolzniki_terjatve.datum_vlozitve < p_datum_vlozitve_to         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik

仅在Join Subqueries中的小注释

中,有很多重复的代码..例如
tabledodatnataksa,tabledodatniodv,tablestroskiizv,tablepravdni
可以很容易地重构为一个子查询

select paketi.id_upnik, 
       sum(znesek) filter(where tip_stroskov='1') as dodatna_taksa, 
       sum(znesek) filter(where tip_stroskov='2') as dodatni_odvetniski, 
       coalesce(sum(znesek) filter(where tip_stroskov='3'),0) as stroski_izvrsitelja, 
       sum(znesek) filter(where tip_stroskov='4') as pravdni 
from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
    where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
          and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
          and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
          and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
          group by paketi.id_upnik

We can define params in WITH section and use them in subqueries

Simple example

with 
  params as (select 1 param_from, 1 param_to)
select header_id, count(*) from position, params
where position.header_id between param_from and param_to
group by header_id

DB Fiddle to play with

Query after refactor

with 
  params as (select '2018-06-01'::timestamp p_datum_vlozitve_from, '2019-01-01'::timestamp  p_datum_vlozitve_to)
select distinct on (upniki.naziv)
upniki.naziv, 
b.stevilo, 
.......  original query  .....

And instead of constans, values from param query can be used.

For example in tabledodatnataksa subquery

select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik

add param to tables and use p_datum_vlozitve_from instead of 2018-06-01 and p_datum_vlozitve_to instead of 2019-01-01

select paketi.id_upnik, sum(znesek) as dodatna_taksa 
           from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi, param 
           where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
           and tip_stroskov='1' 
           and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
           and dolzniki_terjatve.datum_vlozitve >=p_datum_vlozitve_from and dolzniki_terjatve.datum_vlozitve < p_datum_vlozitve_to         
           and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
           group by paketi.id_upnik

Just small note

In JOIN subqueries there is a lot of repetitive code.. for example
tabledodatnataksa,tabledodatniodv,tablestroskiizv,tablepravdni
can be easily refactor to one subquery

select paketi.id_upnik, 
       sum(znesek) filter(where tip_stroskov='1') as dodatna_taksa, 
       sum(znesek) filter(where tip_stroskov='2') as dodatni_odvetniski, 
       coalesce(sum(znesek) filter(where tip_stroskov='3'),0) as stroski_izvrsitelja, 
       sum(znesek) filter(where tip_stroskov='4') as pravdni 
from dolzniki_dodatni_stroski, dolzniki_terjatve, paketi 
    where dolzniki_terjatve.referenca=dolzniki_dodatni_stroski.referenca and dolzniki_terjatve.id_paket=paketi.id_paket 
          and dolzniki_terjatve.glavnica > 0 and dolzniki_terjatve.glavnica < 500
          and dolzniki_terjatve.datum_vlozitve >='2018-06-01' and dolzniki_terjatve.datum_vlozitve < '2019-01-01'         
          and datum <= date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
          group by paketi.id_upnik
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文