Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL Wybierz jeden losowy rekord z każdej kategorii

To zapytanie zwraca wszystkie elementy połączone z kategoriami w kolejności losowej:

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

Aby ograniczyć każdą kategorię do jednej, zawiń zapytanie w częściowe 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

Zwróć uwagę, że gdy zapytanie zawiera zarówno GROUP BY i ORDER BY klauzula, grupowanie jest wykonywane przed sortowaniem. Dlatego użyłem dwóch zapytań:pierwsze sortuje wyniki, drugie grupuje wyniki.

Rozumiem, że to zapytanie nie wygra żadnego wyścigu. Jestem otwarty na sugestie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć znacznik czasu z przygotowanym oświadczeniem

  2. Wielokolumnowe indeksy bazy danych i szybkość zapytań

  3. konwertuj znaczniki czasu epoki Unix na znaczniki czasu JavaScript

  4. Jak przerwać operację INSERT w wyzwalaczu MySql?

  5. Jak wyeliminować tylko ciągłe duplikaty, ale nie wszystkie duplikaty w zapytaniu wybierającym (MySQL)?