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

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

0 голосов
/ 27 апреля 2019

поэтому проблема в том, что я не уверен, почему ответ на эту проблему - нет.

Queries

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.

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

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

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

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

1 голос
/ 27 апреля 2019

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

...