Mysql
 sql >> база данни >  >> RDS >> Mysql

Намиране на най-високите n стойности на всяка група в MySQL

Вижте другия ми отговор за решението само за MySQL, но много бързо.

Това решение ви позволява да посочите произволен брой горни редове на лента и не използва никакъв MySQL „фънки“ синтаксис – трябва да работи в повечето бази данни.

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;

Тестов изход:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли начин да се ограничи резултатът с ELOQUENT ORM на Laravel?

  2. Как мога да направя „вмъкване, ако не съществува“ в MySQL?

  3. Липсващ резултат в задължителните полета

  4. Не мога да се свържа с MySQL със Sequelize

  5. SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo неуспешно:предоставено име на възел или име на сървър или неизвестно