Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL wählt (n) Zeilen jedes Vorkommens aus

Sie versuchen, eine Anzahl von Datensätzen pro Gruppe auszuwählen. Dies kann durch die Verwendung von Variablen in Ihrer Abfrage ähnlich der folgenden erfolgen:

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;

Siehe SQL-Fiddle mit Demo

Es gibt andere Möglichkeiten, dies zu tun, die hier beschrieben werden:

Using LIMIT innerhalb von GROUP BY, um N Ergebnisse pro Gruppe zu erhalten?