Привет, я хочу проверить, есть ли в NumOfSpeakLanguages более 10 языков, как я могу это сделать: вот код:
SELECT country.Name,country.Capital,COUNT(DISTINCT countrylanguage.Language) AS NumOfSpeakLanguages
FROM country,countrylanguage
WHERE country.Code=countrylanguage.CountryCode AND NumOfSpeakLanguages >10
GROUP BY country.Name
вот код ошибки:
SELECT country.Name,country.Capital,COUNT(DISTINCT countrylanguage.Language) AS NumOfSpeakLanguages
FROM country,countrylanguage
WHERE country.Code=countrylanguage.CountryCode AND NumOfSpeakLanguages >10
GROUP BY country.Name LIMIT 0, 25
#1054 - Unknown column'NumOfSpeakLanguages' in 'where clause'
Спасибо!






Используйте предложение HAVING для условий агрегатной функции:
SELECT country.Name,country.Capital,COUNT(DISTINCT countrylanguage.Language) AS NumOfSpeakLanguages
FROM country,
JOIN countrylanguage
ON country.Code = countrylanguage.CountryCode
GROUP BY country.Name
HAVING COUNT(DISTINCT countrylanguage.Language) > 10
LIMIT 0, 25
@Andrew Brēza прокомментировал: Вы также можете сказать HAVING NumOfSpeakLanguages >10. (Это особенность MySQL.)
Также делаю явный JOIN!
В качестве альтернативы выполните агрегацию в производной таблице:
select * from
(
SELECT country.Name,country.Capital,COUNT(DISTINCT countrylanguage.Language) AS NumOfSpeakLanguages
FROM country,
JOIN countrylanguage
ON country.Code = countrylanguage.CountryCode
GROUP BY country.Name
) dt
where NumOfSpeakLanguages > 10
LIMIT 0, 25
Обыграй меня. Вы также можете сказать HAVING NumOfSpeakLanguages >10, который будет продолжать работать так, как вы ожидаете, даже если вы измените определение РЕДАКТИРОВАТЬ для NumOfSpeakLanguages.
@ AndrewBrēza, да, я забыл про особый трюк с MySQL. (Мой ответ - ANSI SQL и переносимый.)
У меня новая работа, и я перехожу с MySQL на SQL Server, поэтому я развиваю новое понимание переносимого кода :-)
@jarlh Спасибо!
@jarlh Я новичок в Mysql, не могли бы вы объяснить мне, почему я должен использовать явное JOIN вместо Where? Благодарность
@ric, вам не обязательно, но вы действительно должны изучить его как можно скорее. Его легче писать (без ошибок), легче читать и поддерживать, а также проще преобразовать во внешнее соединение, если это необходимо! (Я перешел на него через 20 лет ГДЕ, и я никогда не вернусь!)
@jarlh звучит хорошо, я воспользуюсь им
LIMIT без ORDER BY? Неважно, какие 25 строк у вас получатся?