sql >> Database teknologi >  >> RDS >> Mysql

MYSQL Vælg én tilfældig post fra hver kategori

Denne forespørgsel returnerer alle elementer, der er knyttet til kategorier i tilfældig rækkefølge:

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()

For at begrænse hver kategori til én, skal du pakke forespørgslen i en delvis GROUP BY :

SELECT * FROM (
    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
) AS shuffled_items
GROUP BY cid

Bemærk, at når en forespørgsel både har GROUP BY og ORDER BY klausul udføres grupperingen før sortering. Det er derfor, jeg har brugt to forespørgsler:den første sorterer resultaterne, den anden grupperer resultaterne.

Jeg forstår, at denne forespørgsel ikke kommer til at vinde noget løb. Jeg er åben for forslag.



  1. Java skriv JDBC til Postgres ltree

  2. Generer SQL-sætninger med python

  3. Ekkolodsanalyse tager lang tid

  4. HOUR() vs EXTRACT(HOUR …) i MariaDB:Hvad er forskellen?