Tuning : OVER ( PARTITION BY ) nedir, nasıl kullanılır?

Hiç yorum yok
Merhaba,

Bu yazıda gruplamak istediğimiz bir veriyi performanslı olarak, GROUP BY kullanmadan nasıl çekebilirizi örnekler ile anlatmaya çalışacağım.

Personel_id, departman_no ve departman bazında toplam verecek bir sorgu çekmemiz gerekirse nasıl yazabiliriz.OVER dan sonra yazdığımız PARTITION BY ile aslında COUNT işlemini hangi kolon bazında yapmak istediğimizi belirtiyoruz. Bu kullanım hız ve performans açısından çok daha verimlidir.

SELECT personel_id, departman_no, COUNT(*) 
OVER (PARTITION BY departman_no) DEPT_COUNT
FROM personel

PERSONEL_ID         DEPARTMAN_NO  DEPT_COUNT
1                                      10                             3 --10 numaralı departmandaki kişi sayısı
2                                      10                             3 --10 numaralı departmandaki kişi sayısı
3                                      10                             3 --10 numaralı departmandaki kişi sayısı
4                                      20                             2 --20 numaralı departmandaki kişi sayısı
5                                      20                             2 --20 numaralı departmandaki kişi sayısı


Eğer sorguyu aşağıdaki gibi yazacak olsaydık, 
SELECT personel_id, departman_no, COUNT(*) 
OVER () DEPT_COUNT
FROM personel

PERSONEL_ID DEPARTMAN_NO DEPT_COUNT
1                              10                               5 --toplam kişi sayısı
2                              10                               5 --toplam kişi sayısı
3                              10                               5 --toplam kişi sayısı
4                              20                               5 --toplam kişi sayısı
5                              20                               5 --toplam kişi sayısı

 İşinize yaraması dileğiyle,


Referans : http://stackoverflow.com/questions/561836/oracle-partition-by-keyword

Hiç yorum yok :

Yorum Gönder