За 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).