Вопрос

Хорошо, этот (3a; пример проблемы с предоставленным ответом) заставил меня почесать голову

  

Би-би-си (имя, регион, район, население, ВВП)
   3a. Найдите самую большую страну в каждом регионе:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

Я понимаю концепцию ' WHERE y.region = x.region ', когда я думаю об этом с точки зрения механизма обработки базы данных, проходящего по элементам таблицы и сопоставляющего каждый x.region с текущим y.region (во вложенном SELECT) ... но wtf делает ' AND население > 0 'делать? Это неправильный ответ без него, но я не понимаю, как нет ...

Это было полезно?

Решение

Это предложение существует только потому, что в таблице Европы (для Ватикана) есть запись, в столбце которой содержится NULL. Следующие работы также, и я считаю, что это более понятно:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population IS NOT NULL)

В документации MySQL для ВСЕХ подзапросов есть полезный комментарий (выделите их):

  

Как правило, таблицы, содержащие NULL значения и пустые таблицы , являются "крайними случаями". " При написании кода подзапроса всегда учитывайте, учли ли вы эти две возможности.

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

Я спекулирую здесь.

Что если численность населения равна нулю для всех записей определенного региона?

РЕДАКТИРОВАТЬ. Можно считать своего рода сетью безопасности игнорирование -ve значений в популяции (не сценарий реальной жизни).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top