sql >> Databasteknik >  >> RDS >> Mysql

Använda `rand()` med `having`

Jag tror att problemet är att HAVING tillämpas efter GROUP BY, men fortfarande före SELECT-fasen. Jag inser att det är förvirrande eftersom HAVING-satsen refererar till en kolumn från SELECT-satsen, men jag tror att den i princip bara kör vad som finns i SELECT-satsen två gånger - en gång för att ha och sedan igen för SELECT.

Se till exempel det här svaret .

Observera att det är särskilt förvirrande eftersom om du hänvisar till ett kolumnnamn som inte visas i SELECT-satsen i en HAVING-sats kommer det att skapa ett fel.

T.ex. denna fiol

Men enligt den fiolen ovan låter den dig fortfarande filtrera baserat på resultatet av en funktion som inte visas i utdata. Lång historia kort, HAVING-satsen gör fortfarande vad du vill, men du kan inte både filtrera på ett slumpmässigt värde och visa det samtidigt med den metoden. Om du behöver göra det måste du använda en underfråga för att fixa värdet först, sedan kan den yttre frågan filtreras och visas på den.

Dessutom, för att göra det tydligt, är det förmodligen värt att bara använda RAND() i having-satsen, inte SQL-delen. Även om jag förstår att den här frågan frågar varför det gör det här snarare än att försöka lösa problemet specifikt.




  1. Hur man SQL-fråga förälder-underordnade för specifikt JSON-format?

  2. TRIGGER eller MULTI Insert

  3. MySQL:Hur infogar man en post för varje resultat i en SQL-fråga?

  4. Hur man använder en temp kolumn i where-satsen