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

Convert UNION selects to single select with loop v MySQL

V MySQL (před 8.0) k tomu můžete použít proměnné:

select genre_name, actor_id, cnt
from (select genre_name, actor_id, cnt,
             (@rn := if(@g = genre_name, @rn + 1,
                        if(@g := genre_name, 1, 1)
                       )
             ) as rn
      from (select g.genre_name, r.actor_id, count(*) as cnt
            from movie m join
                 role r
                 on r.movie_id = m.movie_id join
                 movie_has_genre mhg
                 on mhg.movie_id = m.movie_id join
                 genre g
                 on g.genre_id = mhg.genre_id
            group by g.genre_name, r.actor_id
            order by g.genre_name, cnt desc
           ) ga cross join
           (select @g := '', @rn := 0) params
      ) ga
where rn <= 3;

Ve verzi 8.0+ použijte row_number() standardní metoda ANSI pro tuto funkci.

Poznámky:

  • Nikdy použijte čárky v FROM doložka. Vždy použijte správné, explicitní JOIN syntaxe.
  • Používejte aliasy tabulek, které představují zkratky pro sloupce, které používáte.
  • Uveďte všechny názvy sloupců v dotazech, které používáte, zejména pokud FROM klauzule odkazuje na více než jednu tabulku.


  1. Jaký je nejlepší způsob, jak implementovat opravu překlepů do vyhledávání v php/mysql?

  2. 2 způsoby, jak povolit zalamování slov v SQLite

  3. Verze tabulek (historické tabulky) a vztah mezi tabulkami pořadí

  4. Vysvětlete plán ve výkonu mysql pomocí Using dočasné; Pomocí řazení souborů; Použití podmínky indexu