sql >> データベース >  >> RDS >> Mysql

1回のクエリでDISTINCTごとに複数のレコードを選択します

    変数を使用して、順序付けられたクエリに対して2つの異なるカウントを実行する必要があります。1つは各ユーザーの投稿数、もう1つはユーザーの投稿数です。

    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
    

    編集: このクエリを試すことも検討してください:

    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
    

    (これにより、選択した各ユーザーからのすべての投稿から5つの投稿が選択されるだけなので、それでも必要なものではありませんが、サブサブクエリでLIMITを使用するトリックを使用します)

    編集2: 次のクエリでは、20人のユーザーごとに5つの投稿が制限されます:

    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. SQLコマンド

    2. codeigniterActiveRecordで実行前と実行なしのエコークエリ

    3. エラー:Postgresを使用したシーケンスcitys_id_seqの権限が拒否されました

    4. エラーコード1111。グループ関数の使用が無効です。