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

Trouver les n valeurs les plus élevées de chaque groupe dans MySQL

Voir mon autre réponse pour la solution MySQL uniquement, mais très rapide.

Cette solution vous permet de spécifier n'importe quel nombre de lignes supérieures par voie et n'utilise aucune syntaxe "funky" MySQL - elle devrait fonctionner sur la plupart des bases de données.

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;

Résultat du test :

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)