Jeg tror, problemet er, at HAVING anvendes efter GROUP BY, men stadig før SELECT-fasen. Jeg er klar over, at det er forvirrende, fordi HAVING-sætningen refererer til en kolonne fra SELECT-sætningen, men jeg tror, at den i bund og grund bare udfører hvad der er i SELECT-sætningen to gange - én gang for at have, og så igen for SELECT.
Se f.eks. dette svar .
Bemærk, det er især forvirrende, fordi hvis du henviser til et kolonnenavn, der ikke vises i SELECT-sætningen i en HAVING-sætning, vil det give en fejl.
F.eks. denne violin
Men ifølge den violin ovenfor, vil den stadig lade dig filtrere baseret på resultatet af en funktion, der ikke vises i outputtet. Lang historie kort, HAVING-sætningen gør stadig, hvad du vil, men du kan ikke både filtrere på en tilfældig værdi og vise den på samme tid ved at bruge den tilgang. Hvis du skal gøre det, skal du bruge en underforespørgsel til at rette værdien først, derefter kan den ydre forespørgsel filtrere og vises på den.
Også, for at gøre det klart, er det nok værd bare at bruge RAND() i have-sætningen, ikke SQL-delen. Selvom jeg forstår, at dette spørgsmål spørger hvorfor det gør dette i stedet for at prøve at løse problemet specifikt.