sql randomize percentage

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

sql randomize percentage

Mesaj gönderen bulutsuzluk_35 »

Merhabalar,

şöyle bir tablo düşünelim
RecID RankAmount RankPercent
2 5.00 13.51
12 1.00 2.70
14 12.00 32.43
5 7.00 18.92
7 2.00 5.41
9 10.00 27.03

6 kayıt var ve ben bunlardan sadece birini seçecem ama seçimim rankpercent alanında ki yüzdelere göre olacak bu tabloda %32,43 ile seçilme oranı en yüksek olan 14 recid li record.
rankamount alanı çok önemli değil aslında ben rankpercent değerlerini rankamounttan oluşturdum.
Fikri olan ?

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: sql randomize percentage

Mesaj gönderen unicorn64 »

kayıtları RankPercent alanına göre azalan sırada sıralayıp ilk kaydı almak yeterli olur sanırım.

Kod: Tümünü seç

SELECT TOP 1 * FROM MYTABLE ORDER BY RANKPERCENT DESC
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: sql randomize percentage

Mesaj gönderen bulutsuzluk_35 »

pardon ben söylemeyi unuttum bu seçim random olacak ama random yaparken rankpercentlerdeki orana göre olasılık hesaplamak lazım yada
randomize işlemi şöyle olacak yani
%32 olanın random sonucu gelme ihtimali en yüksek olacak mesela...

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: sql randomize percentage

Mesaj gönderen thelvaci »

SQL Server'da rastgele kayıt çekmek için ben genelde şu yapıyı kullanıyorum.

Kod: Tümünü seç

SELECT TOP 1 *
FROM Tablo
ORDER BY NEWID()
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: sql randomize percentage

Mesaj gönderen mkysoft »

RankPercent değerlerinin toplamının 100 olduğunu varsayıyorum, eğer 100 etmiyorsa 100 olması için normalize işlemi yapınız. RankPercent alanına göre kayıtları büyükten küçüğe sıralayın ve kümülatif toplayın. 0-100 arasında rastsal bir sayı oluşturun ve rastsal sayıdan büyük ilk değeri alın.
Örnek:
sıralayalım
RecID RankAmount RankPercent
14 12.00 32.43
9 10.00 27.03
5 7.00 18.92
2 5.00 13.51
7 2.00 5.41
12 1.00 2.70

Kümülatif
RecID RankAmount RankPercent
14 12.00 32.43
9 10.00 59.46
5 7.00 78.38
2 5.00 91.89
7 2.00 97.30
12 1.00 100.00

Rastgele sayı 90 olsun. Bu durum seçilen kayıt 2 RecId'lidir. Bu işlemleri SQL ilede yapabilirsiniz, isterseniz strored procedure yazın daha kolay olur.
Bu işlemin literatürdeki adı rulet çemberi (roulette wheel) dir.
Cevapla