Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql wybierając (n) wierszy każdego wystąpienia

To, co próbujesz zrobić, to wybrać liczbę rekordów na grupę. Można to zrobić za pomocą zmiennych w zapytaniu podobnych do tego:

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;

Zobacz SQL Fiddle z wersją demonstracyjną

Można to zrobić na inne sposoby, które opisano tutaj:

Korzystanie LIMIT w ramach GROUP BY, aby uzyskać N wyników na grupę?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podzapytanie MySQL zwraca więcej niż jeden wiersz

  2. Mysql:jak wybrać grupy posiadające określone wartości?

  3. Ostrzeżenie:Nie można modyfikować informacji nagłówka - nagłówki już wysłane przez błąd

  4. Jaki jest najlepszy sposób na dwukierunkową synchronizację danych dynamicznych w czasie rzeczywistym za pomocą mysql

  5. pole tekstowe typu wejściowego dające naprawiony błąd 2147483647