#mysql #sql
#mysql #sql
Вопрос:
Вопрос: Извлеките количество моделей, созданных каждой маркой только за 2002 год. Упорядочите результаты по make. Исключить производители, которые производят только менее 5 моделей, используя предложение having.
Что у меня есть:
select count(model) from vehicle where year="2002" order by make having count(model) > 5
Это выдает ошибку для предложения наличия. Кто-нибудь знает?
Комментарии:
1. having хочет сгруппироваться по чему-то
2. «по каждой марке», но у вас нет
make
в вашемSELECT
предложении, и как только вы поместите его туда, оно вам понадобится и вGROUP BY
предложении.3.Синтаксическая ошибка заключается в том, что
ORDER BY
она должна появиться послеHAVING
.4. Небольшой момент… Я заметил, что в вопросе указано исключить те модели, у которых меньше 5 моделей, но код включает только те, у которых больше 5. Как насчет ровно 5?
Ответ №1:
Я думаю, вы можете захотеть:
select make, count(*)
from vehicle
where year="2002"
group by make
having count(*) >= 5
order by make
Позвольте мне рассказать вам об этом. В вашем операторе select вы хотите сделать, а затем подсчитать, сколько записей у вас есть на make, что выражается как count(*) . Вы выбираете из строк в vehicle, где год 2002. Эта часть у вас была правильной. Затем вам нужно использовать оператор group by. Вы ничего не сможете посчитать, если не сгруппируете записи, которые хотите посчитать. Для вас объедините записи с тем же make. Затем вы можете указать, что в каждой группе должно быть не менее 5 записей.
Это важный момент — предложение WHERE должно использоваться для изменения таблицы перед оператором GROUP BY . После того, как вы сгруппируете свою таблицу, вы должны использовать HAVING, но вы не можете использовать HAVING без GROUP BY .
Комментарии:
1. В вопросе указано «по каждой марке», поэтому
model
, вероятно, не относится кSELECT
orGROUP BY
.