En iyi yanıtlayıcılar
gruplandırma sorunu

Soru
-
merhaba bir sorgum var örneğin 3+1 / 4+1 / 5+ 1 daire olan birden fazla kaydım var..
ben hepsini gruplandırmak istedim
örneğin 5+1 den 10 kayıt varsa bunun toplamını istiyorum
5+1 = toplamı 150 tane
3+1 = toplamı 200 tane gibi .....
sorgum bu şekilde yaptım ve çalıştı
SELECT proje.PROJE_ADI, oda.ADI AS ODA_TIPI, COUNT(*) AS ODA_ADET FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz
INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD oda ON bagimsiz.ODA_SAYISI = oda.KOD_ID WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje.PROJE_ADI, oda.ADI order by proje.PROJE_ADI
ancak
sorguya T_TEM_EKSPERTIZ_ICERIK tablosunu ve T_TEM_PROJE_BAGIMSIZ_BOLUM tablosundan
2 kolon daha eklemem lazım onun için..
sorgumu şu şekilde değiştiriyorum ancak her kaydı tek tek gösteriyor
SELECT proje.PROJE_ADI, oda.ADI AS ODA_TIPI, COUNT(*) AS ODA_ADET, icerik.PAZAR_DEGERI as TOPLAM_EKSPERTIZ, bagimsiz.BB_BRUT_M2_ALAN AS KONUT_SATIS_BIRIM_BURUT_M2, bagimsiz.TICARET_SATIS_M2 AS TICARET_SATIS_BIRIM_M2 FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD oda ON bagimsiz.ODA_SAYISI = oda.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje.PROJE_ADI, oda.ADI,icerik.PAZAR_DEGERI,bagimsiz.BB_BRUT_M2_ALAN,bagimsiz.TICARET_SATIS_M2 order by proje.PROJE_ADI
- Düzenleyen mustafa3434 10 Temmuz 2013 Çarşamba 13:44
Yanıtlar
-
Iki field in toplamlarinin birbirine bolunmesiyle, iki field in birbirine bolumunun toplami farklidir. Sunu dener misiniz
SUM(TOPLAM_EKSPERTIZ) / SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_EKS_ORT_M2
- Yanıt Olarak Öneren Passengers 11 Temmuz 2013 Perşembe 13:52
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 13:54
-
Merhaba
O zaman sunu deneyin
SELECT PROJE_ADI, DAIRE_TIPI, COUNT(*) AS DAIRE_SAYISI, SUM(TOPLAM_EKSPERTIZ) AS TOPLAM_EKSPERTIZ, SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(TICARET_SATIS_BIRIM_M2) AS TICARET_SATIS_BIRIM_M2 FROM ( SELECT proje.PROJE_ADI, daire.ADI AS DAIRE_TIPI, icerik.PAZAR_DEGERI AS TOPLAM_EKSPERTIZ, bagimsiz.BB_BRUT_M2_ALAN AS KONUT_SATIS_BIRIM_BURUT_M2, bagimsiz.TICARET_SATIS_M2 AS TICARET_SATIS_BIRIM_M2 FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD daire ON bagimsiz.ODA_SAYISI = daire.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' ) a GROUP BY PROJE_ADI, DAIRE_TIPI order by PROJE_ADI
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 07:32
-
Aslinda ben baska turlusunu verdim sana:) Sadece digerlerini de ayni sekilde ekleyeceksin. Neden joinde kullanma:
Tablo1:
Id, Deger
1, 10Tablo2:
Id, Deger2
1, 10
1, 20Bu durumda:
select Tablo1.Id, count(tablo2.Deger2) as sayi, sum(tablo2.Deger2) as toplam from ... join ...
yaparsan sonucta dogru olarak:
1, 2, 30 alirsin.
ANCAK, tablo1'de o ID kazara primary key degilse o zaman join coka-cok olabiliyor demektir:
Tablo1:
Id, Deger
1, 1
1, 2
1, 3girilmisse join sonucu alacagin sonuclar 3 ile carpilacak:
1, 6, 90
Nasil olsa benimkiler hep primary key diyebilirsin, sonucta senin kararin:)
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 16:25
-
Senin ilk gruplaman proje ve oda'da karsilik gelen sadece birer kayit oldugu icin dogru calisiyordur. Kazara coka-cok iliski olsa sonuclar farkli olacak. Ornek olarak ilkini su sekilde yazsan daha garanti (bunu ikinciye uyarlayabilirsin ama verini ve ne yapmak istedigini sen biliyorsun):
SELECT proje.PROJE_ADI , oda.ADI AS ODA_TIPI , sayim.ODA_ADET FROM ( SELECT proje_id , ODA_SAYISI , COUNT(*) AS ODA_ADET FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje_id , ODA_SAYISI ) sayim INNER JOIN T_TEM_PROJE proje ON sayim.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD oda ON sayim.ODA_SAYISI = oda.KOD_ID ORDER BY proje.PROJE_ADI
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 07:32
Tüm Yanıtlar
-
-
-
Senin ilk gruplaman proje ve oda'da karsilik gelen sadece birer kayit oldugu icin dogru calisiyordur. Kazara coka-cok iliski olsa sonuclar farkli olacak. Ornek olarak ilkini su sekilde yazsan daha garanti (bunu ikinciye uyarlayabilirsin ama verini ve ne yapmak istedigini sen biliyorsun):
SELECT proje.PROJE_ADI , oda.ADI AS ODA_TIPI , sayim.ODA_ADET FROM ( SELECT proje_id , ODA_SAYISI , COUNT(*) AS ODA_ADET FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje_id , ODA_SAYISI ) sayim INNER JOIN T_TEM_PROJE proje ON sayim.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD oda ON sayim.ODA_SAYISI = oda.KOD_ID ORDER BY proje.PROJE_ADI
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 07:32
-
-
-
SELECT proje.PROJE_ADI, oda.ADI AS ODA_TIPI, COUNT(*) AS ODA_ADET, icerik.PAZAR_DEGERI as TOPLAM_EKSPERTIZ, SUM(bagimsiz.BB_BRUT_M2_ALAN) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(bagimsiz.TICARET_SATIS_M2) AS TICARET_SATIS_BIRIM_M2 FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD oda ON bagimsiz.ODA_SAYISI = oda.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje.PROJE_ADI, oda.ADI order by proje.PROJE_ADI
-
-
merhaba ali teşekkür ederim ancak yine aynı benim yaptığım gibi çıkıyor senin yaptığın tarzı bende şunu denemiştim
SELECT proje.PROJE_ADI, daire.ADI AS DAIRE_TIPI, COUNT(*) AS DAIRE_SAYISI, SUM(icerik.PAZAR_DEGERI) AS TOPLAM_EKSPERTIZ, SUM(bagimsiz.BB_BRUT_M2_ALAN) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(bagimsiz.TICARET_SATIS_M2) AS TICARET_SATIS_BIRIM_M2 FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD daire ON bagimsiz.ODA_SAYISI = daire.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' GROUP BY proje.PROJE_ADI, daire.ADI ,icerik.PAZAR_DEGERI,bagimsiz.BB_BRUT_M2_ALAN order by proje.PROJE_ADI
çetin arkadaşımın da dediği biraz yabancı geldi açıkca dediğini beceremedim.
belki ben anlatamadım
müşteri adi soyadı tutar
VELİ KIZIL 20,00 YTL
Ahmet YILMAZ 12,50 YTL
VELİ KIZIL 30,00 YTL
VELİ KIZIL 40,00 YTL
Ahmet YILMAZ 5,50 YTL
ben bu listenin bana şöle çıkmasını istiyorum
müşteri adi soyadı tutar
VELİ KIZIL 90,00 YTL
Ahmet YILMAZ 18,00 YTL
- Düzenleyen mustafa3434 10 Temmuz 2013 Çarşamba 19:32 ASDASDAS
-
Merhaba
O zaman sunu deneyin
SELECT PROJE_ADI, DAIRE_TIPI, COUNT(*) AS DAIRE_SAYISI, SUM(TOPLAM_EKSPERTIZ) AS TOPLAM_EKSPERTIZ, SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(TICARET_SATIS_BIRIM_M2) AS TICARET_SATIS_BIRIM_M2 FROM ( SELECT proje.PROJE_ADI, daire.ADI AS DAIRE_TIPI, icerik.PAZAR_DEGERI AS TOPLAM_EKSPERTIZ, bagimsiz.BB_BRUT_M2_ALAN AS KONUT_SATIS_BIRIM_BURUT_M2, bagimsiz.TICARET_SATIS_M2 AS TICARET_SATIS_BIRIM_M2 FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD daire ON bagimsiz.ODA_SAYISI = daire.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' ) a GROUP BY PROJE_ADI, DAIRE_TIPI order by PROJE_ADI
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 07:32
-
WORLD 3+1 1069 398555986 183562,04 0 WORLD 8 2970000 0 WORLD 2+1 1356 530425828,49 173990,78 0 WORLD YOK 68 132680370 24753,84 WORLD 4+1 DUBLEKS 13 9471000 4005,29 0 WORLD 5+1 88 56875783 24005,52 0 WORLD 1+1 1104 179185613 74989,92 0 WORLD 4+1 128 47100122 26213,02 0 WORLD 5+1 DUBLEKS 20 16027895 6453,12 0
evet oldu çok teşekkürler ali- Düzenleyen mustafa3434 11 Temmuz 2013 Perşembe 07:33 sdsadd
-
son bir şey sorsam sorgudaki tabloların id lerinide çıkarmak istedim
BAGIMSIZ_BOLUM_ID, PROJE_ID, EKSPERTIZ_ICERIK_ID, SATIS_FIYAT_ID
iç select kısmına yazdım ancak çıkmıyor, üst select e eklediğimde group by hatası alıyorum,group by kısmına eklediğimde zamanda bu sefer yine her kaydı tek tek çıkarıyor
SELECT PROJE_ADI, DAIRE_TIPI, COUNT(*) AS DAIRE_SAYISI, SUM(TOPLAM_EKSPERTIZ) AS TOPLAM_EKSPERTIZ, SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(TICARET_SATIS_BIRIM_M2) AS TICARET_SATIS_BIRIM_M2, SUM(TOPLAM_SATIS_FIYATI) AS TOPLAM_SATIS_FIYATI FROM ( SELECT proje.PROJE_ADI, daire.ADI AS DAIRE_TIPI, icerik.PAZAR_DEGERI AS TOPLAM_EKSPERTIZ, bagimsiz.BB_BRUT_M2_ALAN AS KONUT_SATIS_BIRIM_BURUT_M2, bagimsiz.TICARET_SATIS_M2 AS TICARET_SATIS_BIRIM_M2 , SF.SATIS_FIYATI AS TOPLAM_SATIS_FIYATI,
bagimsiz.BAGIMSIZ_BOLUM_ID, proje.PROJE_ID, icerik.EKSPERTIZ_ICERIK_ID, SF.SATIS_FIYAT_ID FROM T_TEM_PROJE_BAGIMSIZ_BOLUM bagimsiz INNER JOIN T_TEM_PROJE proje ON bagimsiz.PROJE_ID = proje.PROJE_ID LEFT OUTER JOIN T_KOD daire ON bagimsiz.ODA_SAYISI = daire.KOD_ID LEFT OUTER JOIN T_TEM_EKSPERTIZ_ICERIK ICERIK ON icerik.GAYRIMENKUL_ID = bagimsiz.BAGIMSIZ_BOLUM_ID AND icerik.GECERLI = 1 LEFT OUTER JOIN T_SAT_SATIS_FIYAT SF ON bagimsiz.BAGIMSIZ_BOLUM_ID = SF.GAYRIMENKUL_ID AND SF.GECERLI = 1 WHERE proje.PROJE_ID = '566BA77B-73B4-486D-8D3B-248BC50025B1' ) a GROUP BY PROJE_ADI, DAIRE_TIPI order by PROJE_ADI
- Düzenleyen mustafa3434 11 Temmuz 2013 Perşembe 09:28 zxczx
-
-
doğru diyorsunuz haklısınız,ancak yukarıda eksik yazdığım bir yazı var onu buraya ekliyim,eğer bakarsanız sevinirim
SUM(TOPLAM_EKSPERTIZ) AS TOPLAM_EKSPERTIZ, SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_SATIS_BIRIM_BURUT_M2, SUM(TOPLAM_EKSPERTIZ / KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_EKS_ORT_M2
TOPLAM_EKSPERTIZ İLE KONUT_SATIS_BIRIM_BURUT_M2 bölümünden kalan değeri bir kolonda göstermem lazım
onun için de üsteki select in altına
SUM(TOPLAM_EKSPERTIZ / KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_EKS_ORT_M2
ekledim...
ancak sorun şuki çıkan değer saçma sapan bir şey oluyor
örneğin
x bir satırın
TOPLAM EKSPERTIZI = 398555986
KONUT_SATIS_BIRIM_BURUT_M2 = 183562,04
398555986 / 183562,04 = 2171,23314820428 çıkması gerekirken
KOLONDA : 2328978,64786686129079924636238956623777
gibi bir rakam çıkıyor
tekrar teşekkürler
- Düzenleyen mustafa3434 11 Temmuz 2013 Perşembe 11:57 ASDASD
-
-
-
Iki field in toplamlarinin birbirine bolunmesiyle, iki field in birbirine bolumunun toplami farklidir. Sunu dener misiniz
SUM(TOPLAM_EKSPERTIZ) / SUM(KONUT_SATIS_BIRIM_BURUT_M2) AS KONUT_EKS_ORT_M2
- Yanıt Olarak Öneren Passengers 11 Temmuz 2013 Perşembe 13:52
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 13:54
-
-
Aslinda ben baska turlusunu verdim sana:) Sadece digerlerini de ayni sekilde ekleyeceksin. Neden joinde kullanma:
Tablo1:
Id, Deger
1, 10Tablo2:
Id, Deger2
1, 10
1, 20Bu durumda:
select Tablo1.Id, count(tablo2.Deger2) as sayi, sum(tablo2.Deger2) as toplam from ... join ...
yaparsan sonucta dogru olarak:
1, 2, 30 alirsin.
ANCAK, tablo1'de o ID kazara primary key degilse o zaman join coka-cok olabiliyor demektir:
Tablo1:
Id, Deger
1, 1
1, 2
1, 3girilmisse join sonucu alacagin sonuclar 3 ile carpilacak:
1, 6, 90
Nasil olsa benimkiler hep primary key diyebilirsin, sonucta senin kararin:)
- Yanıt Olarak İşaretleyen mustafa3434 11 Temmuz 2013 Perşembe 16:25