13.03.2008

DENSE_RANK ile Gruba duyarli siralama

Karsilastigim sorun soyleydi.

Elimde Ulke, Kullanici Adi, Tarih seklinde erisim istatistikleri var, ve bunlari bir duzene sokmam ve bir grafikte gostermem gerekiyor. Ornegin Subat ayinda kac rapor goruntulenmis, hangi ulkeden goruntulenmis, hangi kullanici tarafindan goruntulenmis.

Basit bur group by ile count aliyoruz ve grafigimiz hazir ama soyle bir problem var. Cok fazla kullanici var hepsini grafikte gostermek mumkun degil o zaman aktif kullanicilari grafikte gosteryeim daha az aktif olanlari ise toplayim DIGERLERI seklinde gostereyim.

Bunun icin kullanicilari ulkelerine ve ay'a gore gruplamam ve erisim sayilarina gore siralamam gerekiyor. Iste burada Dense_Rank, grup bazinda siralam yapmamiza yardim ediyor.

BOL 'a bakalim.
DENSE_RANK ( ) OVER ( [ <> ] < order_by_clause > )

Evet burada
[ <> ] Group by'a ekledigimiz kolonlari,
< order_by_clause > Siralamayi yapmak icin.

Soyleki, aktif 20 kisi gozuksun digerleri bir ararda gozuksun


Select
xAy,
xUlke,
CASE
WHEN (DENSE_RANK() OVER (PARTITION BY xAy, xUlke order by COUNT(*) desc) ) <=20 THEN xKullanici ELSE xUlke +'-DIGERLERI' xKullanici, COUNT(*) ErisimSayisi

FROM
ErisimBilgisi
GROUP BY
xAy,

xUlke,
xKullanici


Kolay Gelsin,

Hiç yorum yok: