sql >> Databasteknik >  >> RDS >> MariaDB

Returnera slumpmässiga rader från en tabell i MariaDB

Här är ett snabbt sätt att returnera slumpmässiga rader från en tabell i MariaDB.

Anta att vi har en tabell som heter Pets med följande data:

SELECT  
    PetId,
    PetName
FROM Pets;

Resultat:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     1 | Fluffy  |
|     2 | Fetch   |
|     3 | Scratch |
|     4 | Wag     |
|     5 | Tweet   |
|     6 | Fluffy  |
|     7 | Bark    |
|     8 | Meow    |
+-------+---------+

Vi kan använda RAND() funktion i kombination med en ORDER BY satsen och LIMIT nyckelord för att returnera slumpmässiga rader från den tabellen.

Exempel:

SELECT  
    PetId,
    PetName
FROM Pets 
ORDER BY RAND() 
LIMIT 5;

Exempelresultat:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     5 | Tweet   |
|     7 | Bark    |
|     1 | Fluffy  |
|     8 | Meow    |
|     3 | Scratch |
+-------+---------+

Och om jag kör det igen får jag det här:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     3 | Scratch |
|     8 | Meow    |
|     4 | Wag     |
|     7 | Bark    |
|     6 | Fluffy  |
+-------+---------+

Och så vidare...

Tänk på att detta är ganska intensivt och bör inte användas på större bord.

När du använder den här tekniken läser MariaDB alla rader i tabellen, genererar ett slumpmässigt värde för var och en av dem, ordnar dem och tillämpar slutligen LIMIT klausul. Detta kommer att resultera i en mycket långsam fråga på stora tabeller.

Se Datasampling:Techniques for Efficiently Finding a Random Row på MariaDB-webbplatsen för tekniker som är mer lämpade för större tabeller.


  1. Hur skriver man DataFrame till postgres-tabellen?

  2. Hur man installerar och säkrar MariaDB på Ubuntu

  3. SQL skiftlägeskänslig strängjämförelse

  4. Hur ger man en unik begränsning till en kombination av kolumner i Oracle?