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

CHỌN một số bản ghi cho mỗi DISTINCT một trong một truy vấn duy nhất

Bạn phải sử dụng các biến, thực hiện hai lần đếm khác nhau trên một truy vấn có thứ tự:một trên số lượng bài đăng cho mỗi người dùng và một cho người dùng:

SELECT posts_counts.*
FROM (
  SELECT
    posts.*,
    @post_count:=case when @prec_user_id=user_id then @post_count+1 else 1 end as pc,
    case when @prec_user_id<>user_id then @user_count:[email protected]_count+1 else @user_count end as uc,
    @prec_user_id:=user_id
  FROM
    posts,
    (select @prec_user_id:=0, @user_count:=0, @post_count:=0) counts
  ORDER BY
    posts.user_id ) posts_counts
WHERE pc<5 and uc<4

CHỈNH SỬA: Bạn cũng có thể cân nhắc thử truy vấn này:

SELECT * 
FROM `posts` 
WHERE
  `user_id` IN ( SELECT user_id FROM (
     SELECT DISTINCT `user_id` 
     FROM `posts` 
    ORDER BY `user_id` DESC 
    LIMIT 4 ) limit_users
  ) 
LIMIT 5

(điều này sẽ chỉ chọn 5 bài đăng, trong số tất cả các bài đăng từ mỗi người dùng đã chọn, vì vậy nó vẫn không phải là những gì bạn cần, nhưng nó sử dụng một thủ thuật để sử dụng LIMIT trong một truy vấn phụ)

EDIT2: Truy vấn tiếp theo sẽ giới hạn 5 bài đăng cho mỗi người trong số 20 người dùng:

select posts_limited.*
from (
  select
    posts.*,
    @row:=if(@last_user=posts.user_id, @row+1, 1) as row,
   @last_user:=posts.user_id
  from
    posts inner join
    (select user_id from
      (select distinct user_id
       from posts
       order by user_id desc
       LIMIT 20) limit_users
    ) limit_users
    on posts.user_id = limit_users.user_id,
    (select @last_user:=0, @row:=0) r
  ) posts_limited
  where row<=5



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều đó có nghĩa là gì khi MySQL ở trạng thái Đang gửi dữ liệu?

  2. CHỌN truy vấn phụ với điều kiện WHERE trong Yii2 find () / QueryBuilder

  3. Các trình kích hoạt cơ sở dữ liệu có an toàn cho các ràng buộc về tính toàn vẹn của bảng chéo không?

  4. php tải lên hình ảnh và lưu tên tệp vào mysql

  5. mysql:chọn tất cả các mục từ bảng A nếu không tồn tại trong bảng B