Syntax

在 SQL 中使用最大結果作為謂詞的值

  • November 21, 2016

假設我想找到所有收入超過Google所有員工的員工,是否可以使用 max 的結果,就好像它是一個值而不是像這樣的表?

select person-name
from Works
where salary > ( select max(salary)
       from Works
       where company-name == "Google" )

(Works 有列 person-name、salary 和 company-name)

是的,這是可能的。但是,您的查詢有幾個語法錯誤。

  1. 標識符中的破折號無效。在下面的範例中,我使用了下劃線。如果您確實以這種方式創建了列,則需要引用它們,例如"person-name"
  2. SQL 中的相等運算符 is =, not==
  3. 字元串常量需要放在單引號 ( ') 中,而不是雙引號

可以將 max 子查詢的結果用作單個值,因為它是單個值。準確地說,它是一個子查詢,因為它max()返回單列和單行。

select person_name
from Works
where salary > (select max(salary)
               from Works
               where company_name = 'Google');

您可以使用另一種方​​法 with> ALL而不是>,使用沒有聚合函式並返回許多值(許多行但仍然是單個列)的子查詢:

select person_name
from Works
where salary > ALL (select salary
                   from Works
                   where company_name = 'Google'
                     and salary is not null );

請注意salary is not null第二個查詢中的條件。Null 必須從比較中刪除,因為它們中的每一個都會將>操作評估為unknown而不是truefalse,因此整個> ALL條件結果將是未知的,並且您不會在輸出中得到任何行。

引用自:https://dba.stackexchange.com/questions/155886