Mysql
 sql >> база данни >  >> RDS >> Mysql

Преобразувайте UNION селекти в единичен избор с цикъл в MySQL

В MySQL (преди 8.0) можете да използвате променливи за това:

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;

В 8.0+ използвайте row_number() стандартния метод ANSI за тази функционалност.

Бележки:

  • Никога използвайте запетаи в FROM клауза. Винаги използвайте правилно, изрично JOIN синтаксис.
  • Използвайте псевдоними на таблици, които са съкращенията за колоните, които използвате.
  • Квалифицирайте всички имена на колони в заявките, които използвате, особено когато FROM клауза препраща към повече от една таблица.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Class.forName(com.mysql.jdbc.Driver).newInstance()

  2. предава стойност в url href в php

  3. непоследователно отстъп с Python след разделяне

  4. Невалиден UTF-8 символен низ при импортиране на CSV файл в база данни на MySQL

  5. CodeIgnite променя името на базата данни по подразбиране в движение