SORU 26: Rastgele isim (Çekiliş)
#1
SORU 26:
Patron personeli motive etmek için bir çekiliş düzenlemeye karar vermiş. Talihli kişiye 5 yıldızlı bir otelde tatil verecekmiş. Tarafsız bir çekiliş işini de yine SQL e bırakıyor.
Açıklama : SQL her çalıştığında farklı tek isim-soyad verecek. Arada basit sorular da fena olmaz Wink

Tabii bu senaryo geliştirilebilir, araya bir hain girer ve İzmir'de çalışanlardan biri çıksın isteyebilir. Hainlik yapmak serbesttir.. Wink
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#2
Merhaba..

Cevap:

Rastgele seçim için Rnd fonksiyonundan faydalandım..

Bu fonksiyon sayesinde Sql her çalıştırıldığında farklı bir isim en üst sıraya yerleşiyordu ama ben sadece en üstteki ismin görünmesini istiyordum..(Herhalde patronda böyle ister.Wink ) Bunu sağlamak için de Top işleçinden yararlandım..


SQL
  1. SELECT Top 1 Ad, Soyad
  2. FROM personel
  3. ORDER BY Rnd([PersonelNo]);



Top 1 değilde Top 3 deseydik ilk üç kişinin listesini görecektik..

Bakalım tatile gidecek şanslı kim olacak.. Wink



  Alıntı
Bu mesajı beğenenler:
#3
İstenilene bu yolla da ulaştım.. Sorgu her açıldığında farklı bir isimle açılıyor..


SQL
  1. SELECT TOP 1
  2. Ad, Soyad
  3. FROM
  4. personel
  5. ORDER BY
  6. RIGHT([PersonelNo]*(RIGHT(TIME(),2))*3,3);





  Alıntı
Bu mesajı beğenenler:
#4
Merhaba..

Konu üzerinde biraz daha kafa yorunca en kullanışlı(hızlı) yöntemin Where şartına yazacağımız aşağıdaki kriter olduğunu gördüm..:

SQL
  1. SELECT personel.Ad, personel.Soyad, personel.PersonelNo
  2. FROM personel
  3. WHERE (((personel.PersonelNo)=INT((50*Rnd())+1)));





  Alıntı
Bu mesajı beğenenler:
#5
Öncelikle tebrikler farklı çözümler sunduğunuz için.. Son cevapta niye "50" ile çarpıp +1 yaptınız? 50 eğer personel sayısıysa bunu kendi bulması gerekmez midi? Eğer countla buldurursak yine aynı derece hızlı olur mu?
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#6
Merhaba..

Tüm veriler üzerinde tek tek işelem yapan yöntemler (hatta ilk çözümüm olan Rnd([PersonelNo]) da buna dahil) çoklu kayıtlarda sonuca geç ulaşmamıza neden oluyordu.. Bu tür yöntem performans açısından uygun değildi yani..

Int((50*Rnd())+1) deyimini alana ölçüt olarak verdiğimizden sonuç çok daha hızlı oldu..

Deyimin açılımına gelirsek..

Rnd() fonksiyonu bize 0 ile 1 arasında rastgele bir sayı üretiyor.. 0,622696697712 - 0,263792932034 gibi.. Bu fonksiyonu ölçütünde kullandığımız PersonelNo alanında 50 sıralı kayıt olduğu için

50*Rnd()

olarak değiştirdim.. Böylece oluşacak rastgele sayıların tam sayı hanesinin -0 la 50 arası bir sayı olmasını sağladım.. 34,75577533245 - 49,00016188622 gibi..

Bu aşamadan sonra Int() fonksiyonu devreye girdi.. Bu fonksiyon oluşan sayıların ondalık hanesindeki sayıları yok edip dışında kalan tam sayılara dönüştürüyor..

+1; Int(50*Rnd()) fonksiyonunu 49 a kadar sayı ürettiğini tesbit edince ekledim..

Belirlediğiniz iki sayı arasında bu şekilde de sayı üretebilirsiniz.

Rnd()*(BüyükSayı - KüçükSayı) + KüçükSayı



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  SORU 11: 2. Harfe Göre Personel Bulmak beab05 13 14.662 11-02-2019, 13:18
Son Mesaj: dsezgin
  SORU 27: İLLERE GÖRE PERSONEL VE MAAŞ TOPLAMI gitarisyen 8 7.060 25-02-2014, 10:17
Son Mesaj: mesut58580
  SORU 37: Adı H ile başlayan Soyadı K ile bitenler onur_can 0 3.028 18-02-2014, 01:03
Son Mesaj: onur_can
  SORU 36: Maaşı Belli aralıkta olanları Listeleme onur_can 0 1.656 18-02-2014, 01:00
Son Mesaj: onur_can
  SORU 30: En yüksek N'inci maaş beab05 11 7.042 19-11-2013, 16:15
Son Mesaj: armane
  SORU 22:Kendi çalıştığı departmanın ortalamasının üzerinde maaşı olanlar yeni54 11 6.943 08-06-2013, 17:59
Son Mesaj: irfn
  SORU 17: PARAMETREYLE MAAŞLARI SORGULAMAK gitarisyen 4 4.269 14-04-2013, 15:03
Son Mesaj: hturkavci03
  SORU 13: İKİ TARİH ARASINDA İŞE GİRENLER VE MAAŞI 1.250 YTL DEN DÜŞÜK OLANLAR Taruz 7 8.336 14-04-2013, 14:08
Son Mesaj: hturkavci03

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi