title: How to move variables from subquery to an outer query - postgres?
body: <p>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 &quot;dolzniki_terjatve.datum_vlozitve&quot; and &quot;dolzniki_terjatve.glavnica&quot;, 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?</p>
  <pre><code>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 &lt;=date(dolzniki_terjatve.datum_vlozitve) + interval '7 month' 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01' 
             and dolzniki_terjatve.glavnica &gt; 0 and dolzniki_terjatve.glavnica &lt; 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 &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01' 
             and dolzniki_terjatve.glavnica &gt; 0 and dolzniki_terjatve.glavnica &lt; 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'         
             and datum &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01' and 
             datum &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01' 
             and datum &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-06-01'
             and datum &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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 &gt; 0 and dolzniki_terjatve.glavnica &lt; 500 
             and dolzniki_terjatve.datum_vlozitve &gt;='2018-06-01' and dolzniki_terjatve.datum_vlozitve &lt; '2019-01-01'
             and datumplacila &lt;= 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)
  </code></pre>