Выбор top n из подзапроса

0

Предположим, у меня есть столовый world(continent, country).

Как я могу отфильтровать эту таблицу, чтобы включить только continent и country из первых пяти стран на каждом континенте (в алфавитном порядке)? Если я хочу выбрать только первую страну по алфавиту, я просто делаю:

SELECT continent, country
FROM world x WHERE country = (
    SELECT country
    FROM world y
    WHERE x.continent = y.continent
    ORDER BY country asc
    LIMIT 1
)

Но если я попытаюсь получить больше одной страны с

SELECT continent, country
FROM world x WHERE country in (
    SELECT country
    FROM world y
    WHERE x.continent = y.continent
    ORDER BY country asc
    LIMIT 5
)

то возникает ошибка:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Каков альтернативный запрос, который я могу запустить?

Теги:
subquery
correlated-subquery

1 ответ

1
Лучший ответ

Для каждой строки подсчитывайте, сколько стран находится в списке:

SELECT continent, country
FROM world x 
WHERE 5 > (
    SELECT count(*) 
    FROM world y
    WHERE x.continent = y.continent
    AND x.country > y.country
)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню