GROUP BY и подзапрос в Select

поэтому проблема, которая у меня есть, заключается в том, что я не уверен, почему ответ на эту проблему - нет.

GROUP BY и подзапрос в Select

Project(pid,name,startYear) Developer(did,name,hireYear) WorksOn(pid,did,year) как схема.

Я понимаю, что в Q7 он выбирает все x.did вместе со счетчиком, у которого год больше 2010, а затем группирует по X.did. Для Q8 он должен выбрать количество всех x.did, которые имеют x.did и год > 2010 вместе с x.did.

Я не совсем понимаю, почему эти запросы разные, и я был бы признателен за любую помощь в понимании этого!

Я предполагаю, что в WorksOn может быть много строк для каждого did. Q7 возвращает только одну строку для каждого отдельного did, группируя их. Но Q8 возвращает все строки WorksOn.

Bill Karwin 27.04.2019 18:20

В Q8 нет условия Year > 2000 во внешнем WHERE предложении, поэтому результат будет другим.

Arulkumar 27.04.2019 18:20
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
2
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ну, первый выбирает только строки, где год больше 2010. Второй просто извлекает все строки, независимо от года. Счетчик будет равен 0 для всех строк с годом, меньшим или равным 2010. В первом GROUP BY также имеет эффект, что в результате did уникален. Во втором случае это не обязательно. Если did не уникален в таблице, он не уникален и в результате.

Они совсем не похожи.

  • Второй выбирает все строки в таблице; первый выбирает только те строки, которые соответствуют условию where.
  • Второй выбирает все строки, даже если на X.did есть дубликаты. Первый выбирает только одну строку на X.did.
  • Первый никогда не вернет второй столбец с нулевым значением; вторая будет.

Существуют очень узкие обстоятельства, когда они возвращают один и тот же набор результатов. Вы должны подумать о том, какие данные сделают это возможным.

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