2017-04-06 5 views
2

私はこの質問をしています:SQLのMAXまたはALL

ヨーロッパのどの国よりも大きい国はどれですか? [名前のみを付けます。](一部の国は、NULL GDP値を有していてもよい)

をウェブサイトからの提案の答えは次のとおりです。

SELECT name 
FROM world 
WHERE GDP >= ALL(SELECT GDP 
        FROM world 
        WHERE population>0 AND continent = 'Europe') 

ここではALLキーワードを使用し、ヌル値の世話をする必要があります私はMAXキーワードを使用し、それがでているようです

SELECT name 
FROM world 
WHERE GDP >= (SELECT MAX(GDP) 
       FROM world 
       WHERE continent = 'Europe') 

WHERE population >0

私のソリューションを使用すると、このようなものですこのケースでは、世話をする必要はありませんNULL

私の解決策は正しいですか? 2つのソリューションのトレードオフは何ですか? MAXよう

+0

GDPまたは人口は?ヨーロッパや世界? –

+0

MySQL、MS SQL Server、またはSqliteを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

+0

ご迷惑をおかけして申し訳ありません、ただ編集しました! –

答えて

1

集約関数はNULL - 値を無視し、その条件

... WHERE GDP >= (SELECT MAX(GDP) FROM world WHERE continent = 'Europe') 

の意味は次のとおりです。GDPが定義されてGDPを持つすべてのヨーロッパの国のGDP以上であれば、それは、本当です。

そして、のような条件と同等です:だから、これはあなたが達成したいものです(と私は運動をそのように解釈する)

GDP >= ALL(SELECT GDP FROM world WHERE continent = 'Europe' and GDP is not null) 

、その後、あなたのアプローチは正しいです。

0

両方のパフォーマンスに関して非常に小さなコンテンツがあります。このページはat MySQL docsです。

  • MySQLはサブクエリで選択リスト 列がインデックス化されている可能性を利用しようとする試みでINALLANY、およびSOMEサブクエリを書き換えます。例えば

    value {ALL|ANY|SOME} {> | < | >= | <=} (uncorrelated subquery) 
    

    、このWHERE句:

    WHERE 5 > ALL (SELECT x FROM t) 
    

    NULL値または空集合が 関与しない限り

  • MySQLはMIN()又はMAX()を含む式では、次の形式の式を増強します次のようにオプティマイザによって処理される可能性があります。

    したがって

。あなたの特定のケースでは、NULLのデータの可能性があるため、ウェブサイトにALLを使用しています。そうでない場合は、上記のようにALLMAXに置き換えることができます。