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ụngJOIN
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.