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

mysql изберете горните n максимални стойности

За n=2 бихте могли

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)

за всеки n можете да използвате подходи, описани тук за симулиране на ранг над дял.

РЕДАКТИРАНЕ:Всъщност това статията ще ви даде точно това, от което се нуждаете.

По принцип това е нещо подобно

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

Заменете grouper с името на колоната, по която искате да групирате, и val с името на колоната, която съдържа стойностите.

За да разберете как точно функционира, отидете стъпка по стъпка от най-вътрешната заявка и ги стартирайте.

Също така има леко опростяване - подзаявката, която намира mid може да върне NULL, ако определена категория няма достатъчно стойности, така че трябва да има КОАЛЕСЦИЯ от това към някаква константа, която би имала смисъл в сравнението (във вашия случай това би било MIN на домейн на val, в статия е MAX).

РЕДАКТИРАНЕ 2: Забравих да спомена, че LIMIT 2,1 определя 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. Как да инсталирате phpMyAdmin на управлявани хостинг акаунти

  2. Съхраняване на изображение в базата данни директно или като base64 данни?

  3. Върнете 0, ако полето е нула в MySQL

  4. Използване на различни механизми за съхранение на MySQL в дизайна на база данни

  5. Най-бързият метод за архивиране и възстановяване на MySQL