Еще один вопрос, связанный с SQL: Field> 0?

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

bbc (имя, область, область, совокупность, gdp)
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", когда я думаю об этом в терминах, когда движок db перебирает записи таблицы и сопоставляет каждый x.регион с текущим y.region(во вложенном SELECT)... но wtf делает "AND population > 0"? Это не правильный ответ без него, но я не вижу, как не...

Ответы

Ответ 1

Этот пункт существует только потому, что в таблице Европы (для Ватикана) есть запись, которая имеет 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 и пустые таблицы, являются "краевыми случаями". При написании кода подзапроса всегда учитывайте, учитывали ли вы эти две возможности.

Ответ 2

Я размышляю над этим здесь.

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

РЕДАКТИРОВАТЬ: Это можно считать видом социальной сети, чтобы игнорировать ценности в населении (а не сценарий реальной жизни).