Как я могу использовать AS и псевдоним в WHERE?

Привет, я хочу проверить, есть ли в 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'

Спасибо!

LIMIT без ORDER BY? Неважно, какие 25 строк у вас получатся?

jarlh 09.04.2021 21:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте предложение 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.

Andrew Brēza 09.04.2021 21:13

@ AndrewBrēza, да, я забыл про особый трюк с MySQL. (Мой ответ - ANSI SQL и переносимый.)

jarlh 09.04.2021 21:14

У меня новая работа, и я перехожу с MySQL на SQL Server, поэтому я развиваю новое понимание переносимого кода :-)

Andrew Brēza 09.04.2021 21:16

@jarlh Спасибо!

ric 09.04.2021 21:21

@jarlh Я новичок в Mysql, не могли бы вы объяснить мне, почему я должен использовать явное JOIN вместо Where? Благодарность

ric 09.04.2021 21:23

@ric, вам не обязательно, но вы действительно должны изучить его как можно скорее. Его легче писать (без ошибок), легче читать и поддерживать, а также проще преобразовать во внешнее соединение, если это необходимо! (Я перешел на него через 20 лет ГДЕ, и я никогда не вернусь!)

jarlh 09.04.2021 21:25

@jarlh звучит хорошо, я воспользуюсь им

ric 09.04.2021 21:28

Другие вопросы по теме