Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chuyển đổi các lựa chọn UNION thành một lựa chọn duy nhất với vòng lặp trong MySQL

Trong MySQL (trước 8.0), bạn có thể sử dụng các biến cho việc này:

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;

Trong 8.0+, hãy sử dụng row_number() phương pháp tiêu chuẩn ANSI cho chức năng này.

Ghi chú:

  • Không bao giờ sử dụng dấu phẩy trong FROM mệnh đề. Luôn luôn sử dụng JOIN thích hợp, rõ ràng cú pháp.
  • Sử dụng bí danh bảng là chữ viết tắt của các cột bạn đang sử dụng.
  • Đủ điều kiện cho tất cả các tên cột trong các truy vấn mà bạn đang sử dụng, đặc biệt là khi FROM mệnh đề tham chiếu nhiều hơn một bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhóm concat tương đương ở lợn?

  2. thao tác xóa mysql

  3. Xung đột loại MySqlParameter khi sử dụng Entity Framework với Pomelo

  4. Có thể xác định cột dấu thời gian không rỗng và không có giá trị mặc định và không có hành vi đặc biệt khi cập nhật không?

  5. Sử dụng kết nối liên tục PHP-MySQL để chạy blog WordPress