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
11 jaar geleden
Geef jouw antwoord
0 / 2500
Geef Antwoord

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()
Verwijderde gebruiker
11 jaar geleden
Deel jouw antwoord
0 / 2500
Geef Antwoord
logo van Kompas Publishing

GoeieVraag.nl is onderdeel van Kompas Publishing