以下语法能够正常工作的原因可能是什么?
根据查询配置文件,解析结果如下:
当提供一个表/子查询时,
然而,如果存在多个列,则无法起作用。
"错误:函数[SUM(VALUES.COLUMN1, VALUES.COLUMN2)]的参数过多。"
只有在SELECT子句中才允许将*用作函数参数。
聚合函数的文档对于SUM, MIN/MAX等情况下的
我正在寻找一个有效的使用案例,它可能会有用。
但是:
SELECT SUM(*), AVG(*), MIN(*), MAX(*), ANY_VALUE(*);
SUM(*) | AVG(*) | MIN(*) | MAX(*) | ANY_VALUE(*) |
---|---|---|---|---|
null | null | null | null | null |
数据类型:
DESCRIBE RESULT LAST_QUERY_ID();
/*
name type kind
SUM(*) NUMBER(30,0) COLUMN
AVG(*) NUMBER(36,6) COLUMN
MIN(*) VARCHAR(0) COLUMN
MAX(*) VARCHAR(0) COLUMN
ANY_VALUE(*) VARCHAR(0) COLUMN
*/
根据查询配置文件,解析结果如下:
EXPLAIN USING TABULAR
SELECT SUM(*), AVG(*), MIN(*), MAX(*), ANY_VALUE(*);
当提供一个表/子查询时,
*
会被解析为第一列。SELECT SUM(*), AVG(*), MIN(*), MAX(*), ANY_VALUE(*)
FROM (VALUES (1)) sub(c);
/*
SUM(*) AVG(*) MIN(*) MAX(*) ANY_VALUE(*)
1 1 1 1 1
*/
然而,如果存在多个列,则无法起作用。
SELECT SUM(*), AVG(*), MIN(*), MAX(*), ANY_VALUE(*)
FROM (VALUES (1,2));
"错误:函数[SUM(VALUES.COLUMN1, VALUES.COLUMN2)]的参数过多。"
SELECT SUM(*)
FROM (VALUES(1))
HAVING SUM(*) > 1;
只有在SELECT子句中才允许将*用作函数参数。
聚合函数的文档对于SUM, MIN/MAX等情况下的
*
没有提供任何线索。我正在寻找一个有效的使用案例,它可能会有用。
编辑:
接受多个输入的聚合函数:
SELECT LISTAGG(*) FROM (SELECT 'a', 'b');
--error: argument 2 to function LISTAGG needs to be constant, found'"values"."'B'"'
但是:
SELECT MIN_BY(*)
FROM (VALUES('a', 'b'), ('aa', 'a')) AS sub(c1, c2);
/*
MIN_BY(*)
aa
*/
编辑2:
它不仅适用于聚合函数,还适用于标量函数:
SELECT COALESCE(*)
FROM (VALUES (NULL, 'a', 'b'));
-- 'a'