sql >> Databáze >  >> RDS >> Mysql

MYSQL Vyberte jeden náhodný záznam z každé kategorie

Tento dotaz vrátí všechny položky spojené do kategorií v náhodném pořadí:

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()

Chcete-li omezit každou kategorii na jednu, zabalte dotaz do části 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

Všimněte si, že když dotaz obsahuje obě GROUP BY a ORDER BY klauzule, seskupení se provádí před řazením. Proto jsem použil dva dotazy:první třídí výsledky, druhý seskupuje výsledky.

Chápu, že tento dotaz nevyhraje žádný závod. Jsem otevřený návrhům.



  1. Laravel – porušení omezení integrity:1452 Nelze přidat nebo aktualizovat podřízený řádek:omezení cizího klíče se nezdaří

  2. Existuje způsob, jak použít FORALL k vložení dat z pole?

  3. Smazat SQLite

  4. Index Mysql je ignorován