Syntax
在 SQL 中使用最大結果作為謂詞的值
假設我想找到所有收入超過Google所有員工的員工,是否可以使用 max 的結果,就好像它是一個值而不是像這樣的表?
select person-name from Works where salary > ( select max(salary) from Works where company-name == "Google" )
(Works 有列 person-name、salary 和 company-name)
是的,這是可能的。但是,您的查詢有幾個語法錯誤。
- 標識符中的破折號無效。在下面的範例中,我使用了下劃線。如果您確實以這種方式創建了列,則需要引用它們,例如
"person-name"
- SQL 中的相等運算符 is
=
, not==
- 字元串常量需要放在單引號 (
'
) 中,而不是雙引號可以將 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而不是true或false,因此整個> ALL
條件結果將是未知的,並且您不會在輸出中得到任何行。