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

各オカレンスの(n)行を選択するMysql

    あなたがしようとしているのは、グループごとにレコードの数を選択することです。これは、次のようなクエリで変数を使用して実行できます。

    select *
    from
    (
        SELECT sid, 
            state, 
            votes,
            @prev := @curr,
            @curr := state,
            @rank := IF(@prev = @curr, @rank+1, 1) AS rank
        FROM
        (
          select t1.sid, state, votes
          FROM table1 t1
          INNER JOIN table2 t2
              ON t1.sid=t2.sid
        ) src, (SELECT @curr := null, @prev := null, @rank := 1) r
        ORDER BY state, votes desc
    ) src
    where rank <= 2
    order by state, votes;
    

    SQL Fiddle withDemo を参照してください。

    ここに概説されているこれを行う他の方法があります:

    使用グループごとにN個の結果を取得するには、GROUP BY内で制限しますか?



    1. 関数からレコードのセット(仮想テーブル)を返します

    2. MySQL更新クエリの値をインクリメントする

    3. MySQLアップデートCASEWHEN/ THEN / ELSE

    4. SQLiteデータベースをAndroid携帯(Android)のWebサーバーに転送する方法