ben de mysql aliasların order by ında bi ara uğraşmıştım ve şuna benzer çözmüştüm.
SELECT DISTINCT EXTRACT(YEAR FROM tarih) AS cc, COALESCE(SELECT SUM(miktar) AS miktar FROM hareketler WHERE tarih BETWEEN CONCAT(EXTRACT(YEAR FROM tarih),'-01-01') AND CONCAT(EXTRACT(YEAR FROM tarih),'-12-31') AND miktar > 0), 0) AS toplam_giris, COALESCE(SELECT SUM(miktar) AS miktar FROM hareketler WHERE tarih BETWEEN CONCAT(EXTRACT(YEAR FROM tarih),'-01-01') AND CONCAT(EXTRACT(YEAR FROM tarih),'-12-31') AND miktar < 0), 0) AS toplam_cikis FROM hareketler WHERE urun_id = 3791 ORDER BY EXTRACT(YEAR FROM tarih); *_________________ * Hasan Basri Ateş *4NET Bilişim Teknolojileri* *+90 (216**)** 414 1 544* *i...@4net.com.tr www.4net.com.tr* 2012/6/8 Omer Barlas <o...@barlas.com.tr> > Yeni bir postgresql sorusu ile tekrar karşınızdayım. > > Bir tane query içerisinde iki tane subquery'im var, ama bu subquery'ler > bir alias'a işaret ediyor. Aliası MySQL üzerinde kullandığımda hiç > sıkıntı yok, ancak PostgreSQL üzerinde aynı sorguyu çalıştırdığımda bana > "böyle bir kolon yok" diye bağırıyor. > > Şöyle ki; > > SELECT > DISTINCT EXTRACT(YEAR FROM tarih) AS cc, > COALESCE(SELECT SUM(miktar) AS miktar FROM hareketler WHERE tarih > BETWEEN CONCAT(cc,'-01-01') AND CONCAT(cc,'-12-31') AND miktar > 0), 0) > AS toplam_giris, > COALESCE(SELECT SUM(miktar) AS miktar FROM hareketler WHERE tarih > BETWEEN CONCAT(cc,'-01-01') AND CONCAT(cc,'-12-31') AND miktar < 0), 0) > AS toplam_cikis > FROM hareketler WHERE urun_id = 3791 ORDER BY cc; > > PostgreSQL'in bana verdiği cevap şöyle; > > ERROR: column "cc" does not exist > > Evet, bu sorguyu önce yılları çekip, daha sonra tek tek yıllara göre > çalıştırmak mümkün, doğrudur, ancak tek sorguda çözebiliyorsam neden > olmasın diye düşünüyorum, acaba recursive bir sorgu mu kullanmak > gerekirdi? Tabi recursive ile ilk kez karşılaştığım için dökümantasyona > maalesef ufo görmüş masum köylü gibi bakıyorum, içinden çıkamadım. > > PostgreSQL'de aliasları subquery'ler içerisinde kullanmanın bir yolu > yordamı var mı, yoksa sorguyu atıp, baştan mı bir şey yazmak lazım? > > -- > Omer Barlas > o...@barlas.com.tr > _______________________________________________ > Linux-sunucu E-Posta Listesi > Linux-sunucu@liste.linux.org.tr > > Liste kurallarını http://liste.linux.org.tr/kurallar.php bağlantısından > okuyabilirsiniz; > > Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen > e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1 > dakika içinde üyeliğinizi sonlandırabilirsiniz. > https://liste.linux.org.tr/mailman/listinfo/linux-sunucu >
_______________________________________________ Linux-sunucu E-Posta Listesi Linux-sunucu@liste.linux.org.tr Liste kurallarını http://liste.linux.org.tr/kurallar.php bağlantısından okuyabilirsiniz; Bu Listede neden bulunduğunuzu bilmiyorsanız veya artık bu listeden gelen e-postaları almak istemiyorsanız aşağıdaki bağlantı adresini kullanarak 1 dakika içinde üyeliğinizi sonlandırabilirsiniz. https://liste.linux.org.tr/mailman/listinfo/linux-sunucu