ORKESTRA

ORKESTRA

  orkestra orkestra.com.tr
  Sohbet   İndirme Merkezi

group by Komutunun Kullanımı

Veri sorgulama sırasında bazı durumlarda GROUP BY fonksiyonu ile belli alanlara göre gruplamak gerekebilir.
Şöyle bir sorum var:

  • Hangi departmanda kaç kişi çalışıyor?           (departmana göre gruplama)
  • Bu ayın satış miktarı nedir?                            (aylara göre gruplama)
  • Hangi yaş grubunda kaç kişi var?                   (doğum yılına göre gruplama)
  • Şehirlere göre ürün dağılımı nedir?                 (şehire göre gruplama)
  • Firmalara göre aylık cirom nedir?                    (firmaya göre gruplama)
    gibi soruların yanıtlarını görmek için group by komutu kullanılır.

Burada dikkat edilecek bir konu group by ifadesinin sorguda her zaman where satırından sonra geldiğinin unutulmamasıdır.

Bir başka önemli konu da gruplama yapıldığı zaman gruplama yapılan değişken dışındaki tüm veriler kaybolur. Onun için gruplama yaparken kurguya çok dikkat etmek gerekir. Aksi takdirde analiz ettiğimiz veri istediğimiz veri olmayacaktır ve bizi yanlış yönlendirecektir.

select 
stok.code as URUN_KODU,
miktarbirim.code as MIKTAR_BIRIM,
count(stok.reference) as URUN_SAYISI,
grup.code as GRUBU,
case stok.trackType
when 0 then 'Stok'
when 1 then 'Lot'
when 2 then 'Seri' else '?' end as IZLEME_YONTEMI,
stok.priceDefault as VARSAYILAN_SATIS_FIYATI
from StockItem stok
left join stok.baseUnit miktarbirim
left join stok.group grup
where stok.entity.reference = :entity_reference
group by miktarbirim.code

Bu sorgunun çıktısı aşağıdaki gibidir.

Miktar Birime Göre Gruplama Örnek - 1

Burada görüldüğü gibi gruplama Miktar Birime göre yapılmıştır. Ürünler Miktar Birime göre gruplandığı zaman mantıklı olan sütunlar Miktar Birim sütunu ve Ürün Sayısı sütunudur. Bunun dışındaki veriler her ne kadar görünse de gruplama içinde hangi ürüne ait olduğu bilinemez.

Bunun yerine Satış Fatura Satırlarını, Ürünlere göre gruplarsak daha mantıklı bir iş yapmış oluruz. Bunun için;

select 
urun.reference as URUN_KAYIT_NO,
urun.code as URUN_KODU,
urun.description as URUN_ACIKLAMA,
sum(satir.quantityBase) as TOPLAM_ADET,
sum (satir.netAmount * fatura.txCurr.txRate) as CIRO_TL,
sum (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate) as NET_TUTAR_TL,
sum ((satir.netAmount - (kdv.vatNet + satir.taxAmount)) *fatura.txCurr.txRate / fatura.rxRate) as NET_TUTAR_RD,
min (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate / satir.quantityBase ) as MIN_FIYAT,
max (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate / satir.quantityBase ) as MAX_FIYAT
from InvoiceLine satir
inner join satir.voucher as fatura
inner join satir.vat as kdv
inner join satir.itemStock as urun
where satir.reference > 0
and fatura.period.reference = :period_reference
and satir.lineType = 2
group by urun.reference

Bu sorgunun çıktısı aşağıdadır.

Miktar Birime Göre Gruplama Örnek - 2

Burada da Satış Fatura Satırları Ürünlere göre gruplanmıştır. Ürün dışındaki diğer veriler kaybolduğu için sadece sütunlarda ürüne ait Kayıt No, Kod ve Açıklama bilgilerine yer verilmiştir. Bunun dışında satırlarda olan diğer veriler için ise işlemler yapılmış ve ürünlere ait;

  • Toplam Adet,
  • Toplam Ciro (TL bazında),
  • TL Cinsinden Toplam Net Tutar,
  • Raporlama Dövizi Cinsinden Toplam Tutar,
  • Ürünün O Güne Kadar Satıldığı Minimum Fiyat,
  • Ürünün O Güne Kadar Satıldığı Maximum Fiyat değerlerini görebilirsiniz.