适用于:
 Databricks SQL 
 Databricks Runtime 16.2 及更高版本
使用链式操作处理上述 查询 的结果。
语法
{ SELECT clause |
  EXTEND { expression [ [ AS ] column_alias ] } [ , ...] |
  SET { column_name = expression } [, ...] |
  DROP column_name [, ...] |
  AS table_alias |
  WHERE clause |
  { LIMIT clause |
    OFFSET clause |
    LIMIT clause OFFSET clause } |
  aggregation |
  JOIN clause |
  ORDER BY clause |
  set_operator |
  TABLESAMPLE clause
  PIVOT clause
  UNPIVOT clause }
 aggregation
   AGGREGATE aggregate_expr [ [ AS ] column_alias ] [, ...]
   [ GROUP BY grouping_expr [AS column_alias ] ]
参数
- 
收集要从查询返回的列,包括执行表达式和重复数据删除。
列列表不得包含聚合函数。 为此,请使用
AGGREGATE操作。 EXTEND
将新列追加到查询选择列表中。
- 
一个或多个值、运算符和 SQL 函数的组合,其计算结果为一个值。
expression可能包含对查询选择列表中列的引用,以及对这个column_alias子句中前面EXTEND的引用。 - 
命名表达式结果的可选列标识符。 如果未提供
column_alias,Azure Databricks 会派生一个。 
- 
 设置
使用新值替代查询选择列表中的现有列。
该操作按
SET子句的出现顺序执行。 任何表达式的结果都可以观察前面表达式更新的列。- 
要更新的列的名称。 如果该列不存在,Azure Databricks 将引发 UNRESOLVED_COLUMN 错误。
 expression
一个或多个值、运算符和 SQL 函数的组合,其计算结果为一个值。
- 
 DROP column_name [, ...]
从查询选择列表中删除列。
如果该列不存在,Azure Databricks 将引发 UNRESOLVED_COLUMN 错误。
AS table_alias
向查询结果分配名称。
- 
根据提供的谓词筛选查询结果。
 - 
限制查询可返回的最大行数。 此子句通常遵循 ORDER BY 来生成确定性结果。
 - 
跳过查询返回的行数。 此子句通常与 LIMIT 结合使用以对遍历结果集分页,并与 ORDER BY 结合使用以生成确定性的结果。
 集合体
根据提供的表达式和可选的分组表达式聚合查询的结果集。
此操作将生成一个结果集,其中分组列显示在聚合列之前。
汇总
指定要聚合的表达式。
- 
包含一个或多个聚合函数的表达式。 有关详细信息,请参阅 GROUP BY 。
 
- 
 分组依据
指定对行进行分组所依据的表达式。 如果未指定,则所有行都被视为单个组。
- 
命名表达式结果的可选列标识符。 如果未提供
column_alias,Azure Databricks 会派生一个。 
- 
使用联接合并两个或多个关系。 有关详细信息,请参阅 JOIN 。
 - 
对查询结果集的行进行排序。 输出行在分区之间排序。 此参数与
SORT BY、CLUSTER BY和DISTRIBUTE BY互斥,不能一起指定。 - 
使用
UNION、EXCEPT或INTERSECT运算符将查询与一个或多个子查询合并。 - 
通过仅对行的一小部分进行采样来减小结果集的大小。
 - 
用于数据透视。 可以根据特定的列值获取聚合值。 有关详细信息,请参阅 PIVOT 。
 - 
用于数据透视。 可以将多个列组拆分为行。 有关详细信息,请参阅 UNPIVOT 。
 
例子
-- This query
> FROM customer
  |> LEFT OUTER JOIN orders ON c_custkey = o_custkey
     AND o_comment NOT LIKE '%unusual%packages%'
  |> AGGREGATE COUNT(o_orderkey) c_count
     GROUP BY c_custkey
  |> AGGREGATE COUNT(*) AS custdist
     GROUP BY c_count
  |> ORDER BY custdist DESC, c_count DESC;
is equivalent to:
> SELECT c_count, COUNT(*) AS custdist
  FROM
    (SELECT c_custkey, COUNT(o_orderkey) c_count
     FROM customer
     LEFT OUTER JOIN orders ON c_custkey = o_custkey
       AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey
    ) AS c_orders
  GROUP BY c_count
  ORDER BY custdist DESC, c_count DESC;
-- Using the SELECT clause following a FROM clause
> CREATE TABLE t AS VALUES (0), (1) AS t(col);
> FROM t
  |> SELECT col * 2 AS result;
 result
 ------
      0
      2
-- Adding columns to the result set
> VALUES (0), (1) tab(col)
  |> EXTEND col * 2 AS result;
 col result
 --- ------
   0      0
   1      2
-- Replacing an expression
> VALUES (0), (1) tab(col)
  |> SET col = col * 2;
 col
 ---
   0
   2
-- Removing a column from the result set
> VALUES (0, 1) tab(col1, col2)
  |> DROP col1;
 col2
 ----
    1
-- Using a table alias
> VALUES (0, 1) tab(col1, col2)
  |> AS new_tab
  |> SELECT col1 + col2 FROM new_tab;
  col1 + col2
            1
-- Filtering the result set
> VALUES (0), (1) tab(col)
  |> WHERE col = 1;
 col
 ---
   1
-- Using LIMIT to truncate the result
> VALUES (0), (0) tab(col)
  |> LIMIT 1;
 col
 ---
   0
-- Full-table aggregation
> VALUES (0), (1) tab(col)
  |> AGGREGATE COUNT(col) AS count;
 count
 -----
     2
-- Aggregation with grouping
> VALUES (0, 1), (0, 2) tab(col1, col2)
  |> AGGREGATE COUNT(col2) AS count GROUP BY col1;
 col1 count
 ---- -----
    0     2
-- Using JOINs
> SELECT 0 AS a, 1 AS b
  |> AS lhs
  |> JOIN VALUES (0, 2) rhs(a, b) ON (lhs.a = rhs.a);
   a   b   c   d
 --- --- --- ---
   0   1   0   2
> VALUES ('apples', 3), ('bananas', 4) t(item, sales)
  |> AS produce_sales
  |> LEFT JOIN
       (SELECT "apples" AS item, 123 AS id) AS produce_data
       USING (item)
  |> SELECT produce_sales.item, sales, id;
   item      sales   id
  --------- ------- ------
  apples    3       123
  bananas   4       NULL
-- Using ORDER BY
> VALUES (0), (1) tab(col)
  |> ORDER BY col DESC;
 col
 ---
   1
   0
> VALUES (0), (1) tab(a, b)
  |> UNION ALL VALUES (2), (3) tab(c, d);
   a    b
 --- ----
   0    1
   2    3
-- Sampling the result set
> VALUES (0), (0), (0), (0) tab(col)
  |> TABLESAMPLE (1 ROWS);
 col
 ---
   0
> VALUES (0), (0) tab(col)
  |> TABLESAMPLE (100 PERCENT);
 col
 ---
   0
   0
-- Pivoting a query
> VALUES
    ("dotNET", 2012, 10000),
    ("Java", 2012, 20000),
    ("dotNET", 2012, 5000),
    ("dotNET", 2013, 48000),
    ("Java", 2013, 30000)
    AS courseSales(course, year, earnings)
  |> PIVOT (
       SUM(earnings)
       FOR COURSE IN ('dotNET', 'Java')
    )
 year dotNET   Java
 ---- ------ ------
 2012  15000  20000
 2013  48000  30000
-- Using UNPIVOT
> VALUES
    ("dotNET", 2012, 10000),
    ("Java", 2012, 20000),
    ("dotNET", 2012, 5000),
    ("dotNET", 2013, 48000),
    ("Java", 2013, 30000)
  AS courseSales(course, year, earnings)
  |> UNPIVOT (
    earningsYear FOR `year` IN (`2012`, `2013`, `2014`)
   course   year earnings
 -------- ------ --------
     Java   2012    20000
     Java   2013    30000
   dotNET   2012    15000
   dotNET   2013    48000
   dotNET   2014    22500