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

mysql wybierz najwyższe n maksymalne wartości

Dla n=2 możesz

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

dla każdego n możesz użyć metod opisanych tutaj symulować rangę na partycji.

EDYCJA:Właściwie to artykuł da ci dokładnie to, czego potrzebujesz.

Zasadniczo jest to coś takiego

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

Zastąp grouper z nazwą kolumny, według której chcesz pogrupować i val z nazwą kolumny, w której przechowywane są wartości.

Aby dowiedzieć się, jak dokładnie działa, przejdź krok po kroku od najbardziej wewnętrznego zapytania i uruchom je.

Istnieje również niewielkie uproszczenie - podzapytanie, które znajduje mid może zwrócić NULL, jeśli dana kategoria nie ma wystarczającej liczby wartości, więc powinno być ZŁĄCZENIE tego z jakąś stałą, która miałaby sens w porównaniu (w twoim przypadku byłoby to MIN domeny wartości, w artykule jest to MAX).

EDIT2: Zapomniałem wspomnieć, że to LIMIT 2,1 określa n (LIMIT n,1).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Import i eksport bazy danych mysql w wierszu poleceń superszybko

  2. Jak działa NIE PODOBNIE w MySQL

  3. WSTAW DO ... WYBIERZ Z ... W AKTUALIZACJI DUPLIKACJI KLUCZA

  4. Zamiana wartości kolumn w MySQL

  5. Jak znaleźć lokalizację MySQL my.cnf?