SELECT 列表中的子查询
子查询可以在包含查询的 select 列表中使用。以下语句的结果按第一列 (customer_name) 进行排序。您也可以写入 ORDER BY 2
,然后指定结果按 select 列表中的子查询进行排序。
=> SELECT c.customer_name, (SELECT AVG(annual_income) FROM customer_dimension
WHERE deal_size = c.deal_size) AVG_SAL_DEAL FROM customer_dimension c
ORDER BY 1;
customer_name | AVG_SAL_DEAL
---------------+--------------
Goldstar | 603429
Metatech | 628086
Metadata | 666728
Foodstar | 695962
Verihope | 715683
Veridata | 868252
Bettercare | 879156
Foodgen | 958954
Virtacom | 991551
Inicorp | 1098835
...
注意
-
select 列表中的标量子查询返回单个行/列值。这些子查询使用 Boolean 比较运算符:=、>、<、<>、<=、>=。
如果查询是相关查询,则当相关生成 0 行时,它将返回 NULL。如果查询返回多行,则查询将在运行时出错,并且 Vertica 会显示错误消息,说明标量子查询必须只能返回 1 行。
-
子查询表达式(例如 [NOT] IN、[NOT] EXISTS、ANY/SOME 或 ALL)总是返回单个评估为 TRUE、FALSE 或 UNKNOWN 的 Boolean 值;子查询自身可以拥有多个行。大多数查询可以为相关或非相关查询。
注意
ALL 子查询不可以为相关子查询。 -
ORDER BY 和 GROUP BY 子句中的子查询受支持,例如,以下语句表示按第一列进行排序,该列是 select-list 子查询:
=> SELECT (SELECT MAX(x) FROM t2 WHERE y=t1.b) FROM t1 ORDER BY 1;