Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql sélectionnant (n) lignes de chaque occurrence

Ce que vous essayez de faire est de sélectionner un certain nombre d'enregistrements par groupe. Cela peut être fait en utilisant des variables dans votre requête similaires à ceci :

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;

Voir SQL Fiddle avec démo

Il existe d'autres façons de le faire qui sont décrites ici :

Utilisation LIMIT dans GROUP BY pour obtenir N résultats par groupe ?