Это ваш запрос:
SELECT cl.countrycode, c.name, c.continent, cl.language
FROM country c JOIN
countrylanguage cl
ON cl.countrycode = c.code
WHERE Percentage = ANY (SELECT MAX(Percentage)
FROM countrylanguage
GROUP BY countrycode
);
Подзапрос возвращает все проценты, которые являются максимальным значением для любой страны. В некоторых странах может быть строка, где 0
- максимальное значение. Вы можете выполнить запрос независимо, чтобы увидеть это.
Внешний запрос затем находит любой процент, который соответствует максимуму для любой страны. Это действительно не имеет смысла.
Максимум для каждой страны . Для этого используйте коррелированный подзапрос:
SELECT cl.countrycode, c.name, c.continent, cl.language
FROM country c JOIN
countrylanguage cl
ON cl.countrycode = c.code
WHERE cl.Percentage = (SELECT MAX(cl2.Percentage)
FROM countrylanguage cl2
WHERE cl2.countrycode = cl.countrycode
);
Разница в том, что подзапрос теперь содержит предложение WHERE
, а не предложение GROUP BY
, предписывающее, чтобы страны были одинаковыми.