Hét vraag- en antwoordplatform van Nederland

Hoe kan je een select query maken die rijen selecteert waarin een waarde staat hoe groot de kans is dat die rij gekozen wordt?

Ik heb hierover al mijn hoofd gekraakt en er moet een oplossing voor zijn, hoewel Google me ook nog niet veel goeds heeft opgebracht.

Ik bedoel dus, stel je hebt een tabel:

- item (bepaald item)
- kans (kans dat dit item uit de tabel wordt geselecteerd)

Hoe kan je een rij selecteren met een item a.d.h.v. de kans dat erbij vermeld staat dat je dit hebt (bv kans om iets te vinden in spel, 1 = zeer weinig te vinden, 10 is zeer makkelijk te vinden)

Iemand dat hier een antwoord op weet?

Verwijderde gebruiker
10 jaar geleden
953

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Het beste antwoord

Ligt een klein beetje aan wat je er daarna mee wil doen.

Als je slechts 1x een select daarop zou doen, kun je gewoon die selecteren met de hoogste kans, dan voldoe je het beste aan de statistieken.

Ga je vaker een select daaruit doen, dan VERANDER je de statistieken. Want zodra je de meest voorkomende selecteert, is de kans dat die gekozen was, nog groter geworden, hij is immers alweer 1x vaker geselecteerd.

Maar stel dat je 4 rijen hebt, als volgt:
ITEM KANS
1 0.1
2 0.2
3 0.3
4 0.4

De totaalkans is 1.0 (0.1+0.2+0.3+0.4).

Zie het als een lijn, waarbij de grootte van de kans overeenstemt met de lengte van dat stukje lijn:

_0.1_|__0.2__|___0.3___|____0.4____
tot: 0.1 0.3 0.6 1

Als je nu random een getal pakt, kun je op die lijn kijken waar die in valt:

DECLARE @rnd FLOAT
SELECT @rnd=RAND()

Stel @rnd wordt 0.5, dan valt die dus tussen de totalen 0.3 en 0.6, zodat je item 3 als resultaat moet pakken. In SQL:

SELECT MIN(id) FROM (
SELECT
id, (SELECT SUM(_2.kans) FROM _ AS _2 WHERE _2.id<=_.id) AS totKans
FROM _
) AS subQ
WHERE subQ.totKans>0.5


En veralgemeniseerd met RAND():

SELECT MIN(id) FROM (
SELECT
id, (SELECT SUM(_2.kans) FROM _ AS _2 WHERE _2.id<=_.id) AS totKans
FROM _
) AS subQ
WHERE subQ.totKans>RAND()
(Lees meer...)
Verwijderde gebruiker
10 jaar geleden

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 5000
Gekozen afbeelding