Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PILIH beberapa catatan untuk masing-masing DISTINCT dalam satu kueri

Anda harus menggunakan variabel, melakukan dua hitungan berbeda pada kueri yang diurutkan:satu pada jumlah posting untuk setiap pengguna, dan satu untuk pengguna:

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

EDIT: Anda mungkin juga mempertimbangkan untuk mencoba kueri ini:

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

(ini hanya akan memilih 5 posting, dari semua posting dari setiap pengguna yang dipilih, jadi itu masih bukan yang Anda butuhkan, tetapi menggunakan trik untuk menggunakan LIMIT di sub-subquery)

EDIT2: Permintaan berikutnya akan membatasi 5 posting untuk masing-masing dari 20 pengguna:

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. Pemetaan hibernasi MySQL DateTime

  2. Menggunakan ORDER BY dan GROUP BY bersama-sama

  3. Matikan peringatan dan kesalahan pada PHP dan MySQL

  4. Bagaimana memilih baris yang berbeda tanpa menggunakan grup demi pernyataan

  5. Bantuan kueri SQL - memiliki dua kondisi di mana dalam kondisi bergabung