sql >> Database >  >> RDS >> Mysql

De hoogste n-waarden van elke groep vinden in MySQL

Zie mijn andere antwoord voor de MySQL-only, maar zeer snelle oplossing.

Met deze oplossing kunt u een willekeurig aantal bovenste rijen per rij specificeren en gebruikt geen MySQL "funky" syntaxis - deze zou op de meeste databases moeten draaien.

select lane, series
from lane_series ls
group by lane, series
having (
    select count(*) 
    from lane_series
    where lane = ls.lane
    and series > ls.series) < 2 -- Here's where you specify the number of top rows
order by lane, series desc;

Testuitgang:

create table lane_series (lane int, series int);

insert into lane_series values 
(1, 680),
(1, 685),
(1, 688),
(2, 666),
(2, 425),
(2, 775);

select lane, series
from lane_series ls
group by lane, series
having (select count(*) from lane_series where lane = ls.lane and series > ls.series) < 2
order by lane, series desc;

+------+--------+
| lane | series |
+------+--------+
|    1 |    688 |
|    1 |    685 |
|    2 |    775 |
|    2 |    666 |
+------+--------+
4 rows in set (0.00 sec)


  1. Wanneer gebruik je LEFT JOIN en wanneer INNER JOIN?

  2. SQL Groeperen op en min (MySQL)

  3. mysql database insert verandert alle ID's in 4294967295

  4. gegevens van de ene tabel naar de andere verplaatsen, postgresql-editie