"Group by" ifadesi ile ilgili

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

"Group by" ifadesi ile ilgili

Mesaj gönderen name »

İyi çalışmalar

FB'de oluşturduğum sp'yi birinci sql ifadesindeki gibi kullandığımda "Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)" bu hatayı alıyorum. İkinci belirtiğim ifadeyi kullandığımda hata oluşmuyor. Merak ettiğim, ikinci ifadeyi kullanmam problem yaratır mı? Veriyi sadece "FIRMA_SNO" alanına göre gruplamak bana yetiyor.

Seçmek istediğim her alanı "GROUP BY" satırında belirtmek zorunda mıyım? Yada Böyle bir tanım yapmak problem yaratır mı?

Kod: Tümünü seç

SELECT FIRMA_SNO,FIRMA_AD,FIRMA_VKN,FIRMA_VD,SUM(STOPAJ),SUM(UCRET)
FROM P_GET_KESINTI_RAPOR (1,'01.01.2004','31.12.2004')
GROUP BY FIRMA_SNO

Kod: Tümünü seç

SELECT FIRMA_SNO,FIRMA_AD,FIRMA_VKN,FIRMA_VD,SUM(STOPAJ),SUM(UCRET)
FROM P_GET_KESINTI_RAPOR (1,'01.01.2004','31.12.2004')
GROUP BY FIRMA_SNO,FIRMA_AD,FIRMA_VKN,FIRMA_VD
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

eger groupby kullanırsanız select icinde group by da listelenen alanlardan baskasını cekemezsiniz.
5 ve 6. seminerleri izlemeyi ihmal etme
bir cok kavramın mantıgını rahatlıkla kavrarsın
ÜŞENME,ERTELEME,VAZGEÇME
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

Benim istediğim sadece "FIRMA_SNO" alanına göre gruplama yapmak. "Group By" satırındaki diğer alanlara görede sıralama yapıp sonuçu etkilemez mi? Mesala FIRMA_VD (Vergi dairesi) aynı değere sahip müşteriler içinde gruplama oluşturup istediğim toplamı etkilemez mi?
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

İlk Programcılığa başladığımda tırmaladığım konu bu. Az tırmalamamıştım. gkimirtinin söylediği doğru. Select alanında listelediğin alanları (sum(field) gibi matematiksel işlemler yaptığın alanlar hariç) mutlaka group by da göstermek zorundasın. Bunu SQL kullanıcılarına çile olsun diye böyle bırakmışlar diye düşünüyorum bazan..
Sevgiler..
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

"Group By" ifadesini bu şekilde kullanmak gerektiğini anladım. Zaten bu şekilde kullanıyorum. Hala anlayamadığım:

- "Group By" satırında kullandığım diğer alanlarda gruplanarak hesabı karıştırır mı?
- "Group By" satırında yer alan her alan gruplandırılıyor mu?

Mesala "Order By Seri_No, Tarih" bu ifadede önce Seri_No daha sonra Tarih alanına göre sıralama yapılıyor. Aynı şey "Group By" ifadesi içinde geçerliyse hesaplamada problem çıkar.
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Çalışma sistemi şöyle...
Group by daki ilk alana bakar ve guruplara ayırır. guruplandırdığı bu alanlar içinde ikinci guruplanacak alana bakar farklılıklar varsa kendi içinde onları da guruplandırır bu ikinci guruplandırmadan sonra üçüncü alana geçer v.s. bu şekilde devam eder. guruplandırdığı her fielda göre toplam alır ve asla yanlış yapmaz... Order by gibi çalışır ancak mantık biraz daha farklı... hem neden yanlış olsun ki anlamadım. oluşan her farklı gurubn toplamını ayrıca alıyor. Birbirine karıştımaz ki...

Sevgiler..
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

name yazdı:"

Mesala "Order By Seri_No, Tarih" bu ifadede önce Seri_No daha sonra Tarih alanına göre sıralama yapılıyor. Aynı şey "Group By" ifadesi içinde geçerliyse hesaplamada problem çıkar.
dediğiniz doğru ama bu gruop by in bir hatası değildir hatta bir artısı olarak bile kabul edilebilir. Eğer siz tablo oluşturmanın gerektirdiği kurallara uymuşsanız her hangi bir problem çıkmaz.

tablonuzda birincil anahtarınız varsa -FIRMA_SNO alanı yer alıyor tablonuzda- gruop by BirincilAnahtar,a,b,c, .....,z yazmanız her hangi bir şeyi değiştirmeyecektir. Çünkü ilk önce BirincilAnahtar değerine göre gruplandırma yapacağından hesaplamalar istediğiniz gibi olacaktır..
name
Kıdemli Üye
Mesajlar: 243
Kayıt: 09 Ağu 2003 02:11
Konum: İstanbul

Mesaj gönderen name »

...guruplandırdığı bu alanlar içinde ikinci guruplanacak alana bakar farklılıklar varsa kendi içinde onları da guruplandırır
Şimdi Daha iyi anladım.

Örnek verirsem şunu demek istemiştim.

Kod: Tümünü seç

 FIRMA_SNO          FIRMA_VD            UCRET
 1                   MKOY                100 TL
 1                   MKOY                200 TL
 1                   MKOY                300 TL
 2                   MKOY                150 TL
 2                   MKOY                100 TL
 2                   MKOY                200 TL
"select FIRMA_SNO,FIRMA_VD,SUM(UCRET) FROM GELIR GROUP BY FIRMA_SNO,FIRMA_VD"
sonucunda oluşan aşağıdaki tabloda "FIRMA_VD" alanına görede gruplama olup olmayacağıydı.

Kod: Tümünü seç

 FIRMA_SNO          FIRMA_VD            UCRET
 1                   MKOY                600 TL
 2                   MKOY                450 TL
Cevap yazan herkese teşekkürler
Cevapla