T-SQL ile Bir Tablodan Rastgele Kayit Nasil Çekilir.

Genellikle istatistik çalismalari yaparken SQL Server üzerinde tuttugumuz kayitlardan rastgele örnekler almamiz gerekir. Örnegin 1 milyon kayit içeren müsteri tablomuzdan rastgele 10 bin tanesini alip bu müsterilerin son 3 aydaki harcama miktarlarindaki degisimi gözlemlemek istiyoruz.

Yukarida verdigimiz örnekte ilk olarak yapmamiz gereken sey 1 milyon kayit içinden rastgele 10 bin tanesini almali sonra bu 10 binlik küme için hangi bilgiler gerekiyorsa onlari da ayrica almaliyiz. Biz bu yazimizda 2. asama ile degil 1. asama ile ilgileniyoruz. SQL serverda rastgele kayit getirmek için birkaç fonksiyon var faka t bunlarin hiç birini kullanmadan çok basit ve güvenilir rastgele kümeler olusturabiliriz.  Bunun için hepimizin bildigi top ve order by ifadelerini ayrica geriye bir uniqueidentifier tipinde deger döndüren newid fonksiyonunu kullanacagiz.

Örnegimizi içinde 19185 kayit olan AdventureWorks veritabanindaki customer tablosu üzerinden yapacagiz. Bu tablodan rastgele 10 adet müsteri kaydi alalim.
.

SELECT   top 10 CustomerID

         ,AccountNumber

FROM     [AdventureWorks].[Sales].[Customer]

ORDER BY NEWID()


Tek yazmamiz gereken yukaridaki basit sql ifadesi. Newid fonksiyonu her seferinde bize tekil bir guid ürettigi için biz bu üretilen guid’e göre siralama yapar bu siralamanin sonunda da ilk 10 kaydi alirsak amacimiza ulasmis oluruz. Bu yöntem oldukça saglikli çalismaktadir rahatça kullanabilirsiniz

5 thoughts on “T-SQL ile Bir Tablodan Rastgele Kayit Nasil Çekilir.

  1.  Çok tesekkür ederim!

    Internette çok karisik saçma sapan bir sürü bilgi vardi konuyla ilgili. Bu kadar sade ve faydali bir yazi koydugunuzdan tekrardan tesekkür ederim.

  2. order by newid ile tablodaki id alani arasinda hiç bir baglanti yok. hatta tablonuzda id alani bile olmayabilir.

    burda yapilan hemen hemen söyle

    1- ilk olarak tablonuzdaki her kayit için bir guid olusturuluyor. bu guidlerin hiç biri digerinin aynisi degil. Bu kismmi newid fonksiyonu yapiyor. select new() yazarak sqlde çalistirip bu fonksiyonu deneyebilirsiniz

    2- ilk asamada her kayit için olusturulan id ler order by ile siralaniyor. idler rastgele olusturuldugu  için, sorgu her çalistirildiginda siralama degisecektir. ( sorguda top kismini kaldirip denerseniz , her çalistirdiginizda kayitlarin farkli siralandigini görürsünüz.)

    3-Rastgele siralanan kayitlardan top 10 ile ilk 10 kaydi aliyoruz.

    Yukaridaki asamalarin sonucunda tablonuzdan rastgele 10 kayit almis oldunuz.

     

  3. öncelikle makale için tesekkür ederim. anlayamadigim bir yer oldu. ORDER BY NEWID() ile rasgele bir guId olusuyor siralama yapmak için tablodaki Id alaninin tipi illa GuId mi olmali.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir