Код, который покажет страны с большим ВВП, чем у любой другой страны

Я новичок в SQL и пытался решить вопрос о SQLzoo

Select the code that would show the countries with a greater GDP than any country in Africa (some countries may have NULL gdp values).

Мой ответ на вопрос был

    SELECT name FROM bbc
    WHERE gdp > ALL (SELECT gdp 
                     FROM bbc 
                     WHERE region = 'Africa' 
                     AND gdp<>NULL)

Но правильный ответ на сайте

SELECT name FROM bbc
 WHERE gdp > (SELECT MAX(gdp) 
              FROM bbc 
              WHERE region = 'Africa')

Я не понимаю, почему выбранный мной ответ неправильный

Вопрос-тест № 5

Удалены конфликтующие теги товаров. Пожалуйста, добавьте обратно тот, который вы действительно используете.

Shadow 21.10.2018 10:08

Я не думаю, что ваш ответ неправильный. Сравнение с агрегатом MAX() могло бы быть немного более эффективным.

Corion 21.10.2018 10:10

@Shadow Я использую тот, который используется sqlzoo. Двигатели

sql_learner 21.10.2018 10:10

@Corion Но когда я запускаю Query, они оба дают разные результаты. Я не понимаю причины этого

sql_learner 21.10.2018 10:11

@sql_learner - ваша задача выбрать правильный. Но не выбирайте конфликтующие.

Shadow 21.10.2018 10:12

@Shadow Да, конечно, с этого момента мы будем заботиться о вас :)

sql_learner 21.10.2018 10:12

Ах - оператор «ВСЕ» (w3schools.com/sql/sql_any_all.asp) возвращает истину, если ВСЕ строки соответствуют критериям, и не возвращает само значение. Это могло быть так. Спасибо, что научили меня этому оператору!

Corion 21.10.2018 10:16
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
7
434
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Проблема с выбранным вами решением > all (...) заключается в том, что некоторые значения gdp равны нулю.

Когда вы сравниваете ненулевое значение с нулевым, результат будет нулевым, если вы не используете нулевой безопасный оператор, такой как is null.

Я думал, что gdp<>NULL позаботится об этой части

sql_learner 21.10.2018 10:23

Есть ли разница между gdp is not null и gdp<>NULL

sql_learner 21.10.2018 10:28

@sql_learner Вместо <> можно использовать нулевой безопасный оператор <=>. например: gdp <=> null Ссылка: dev.mysql.com/doc/refman/8.0/en/…

Madhur Bhaiya 21.10.2018 10:42

@dnoeth Спасибо, что сообщили мне об альтернативном способе использования MIN / MAX.

sql_learner 21.10.2018 10:46

@MadhurBhaiya Да, конечно, я тоже попробую

sql_learner 21.10.2018 10:47

Мой первый комментарий был неправильным. Сравнение gdp<>NULL возвращает UNKNOWN для каждой строки, поэтому подзапрос не возвращает ни одной строки, а сравнение > ALL возвращает каждую строку в вашей таблице. Но подзапрос MAX не вернет никакой строки, если он вернет NULL.

dnoeth 21.10.2018 11:19

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