Tuning : OVER ( PARTITION BY ) nedir, nasıl kullanılır?
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
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
Kaydol:
Kayıt Yorumları
(
Atom
)
Hiç yorum yok :
Yorum Gönder