SQL聚合函数 LIST
创建逗号分隔值列表的聚合函数。
大纲
代码语言:javascript复制LIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [�TERHAVING])
参数
-
ALL
- 可选-指定LIST
返回string-expr
的所有值的列表。 如果没有指定关键字,这是默认值。 -
DISTINCT
- 可选-一个DISTINCT
子句,指定LIST
返回一个仅包含唯一的string-expr
值的列表。DISTINCT
可以指定BY(colo -list)
子句,其中colo -list
可以是单个字段,也可以是用逗号分隔的字段列表。 -
string-expr
- 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。 -
%FOREACH(col-list)
- 可选-列名或以逗号分隔的列名列表。 -
�TERHAVING
- 可选-应用在HAVING
子句中的条件。
描述
LIST
聚合函数返回指定列中以逗号分隔的值列表。
一个简单的LIST
(或LIST ALL
)返回一个字符串,其中包含一个逗号分隔的列表,该列表由所选行中string-expr
的所有值组成。
其中string-expr
为空字符串("
)的行由逗号分隔列表中的占位符逗号表示。
string-expr
为NULL
的行不包含在逗号分隔的列表中。
如果只有一个string-expr
值,并且是空字符串("
),LIST
返回空字符串。
LIST DISTINCT
返回一个字符串,该字符串包含一个逗号分隔的列表,该列表由所选行中string-expr
的所有不同(唯一)值组成:LIST(DISTINCT col1)
。
NULL
string-expr
不包含在逗号分隔的列表中。
LIST(DISTINCT BY(col2) col1)
返回一个逗号分隔的列表,其中只包含那些col2
值是不同(唯一的)的记录中的col1
字段值。
但是请注意,不同的col2
值可能包含一个单独的NULL
值。
包含逗号的数据值
因为LIST
使用逗号分隔string-expr
值,所以LIST
不应该用于包含逗号的数据值。
使用%DLIST
或JSON_ARRAYAGG
代替。
LIST 和 %SelectMode
可以使用%SelectMode
属性来指定LIST
返回的数据显示模式:0=Logical
(默认),1=ODBC
, 2= display
。
注意,LIST
用逗号分隔列值,而ODBC模式用逗号分隔%LIST
列值中的元素。
因此,在%LIST
结构上使用LIST
时,使用ODBC模式会产生不明确的结果。
LIST 和 ORDER BY
LIST
函数将多个行中的一个表列的值组合成一个逗号分隔的值列表。
因为在计算所有聚合字段之后,查询结果集中应用了一个ORDER BY
子句,所以ORDER BY
不能直接影响这个列表中的值序列。
在某些情况下,LIST
结果可能会按顺序出现,但是不应该依赖这种顺序。
在给定聚合结果值中列出的值不能显式排序。
最大列表大小
允许的最大LIST
返回值是最大字符串长度,3641,144
个字符。
相关的聚合函数
-
LIST
返回一个逗号分隔的值列表。 -
%DLIST
返回一个包含每个值的元素的列表。 -
JSON_ARRAYAGG
返回值的JSON数组。 -
XMLAGG
返回一个串接的值字符串。
示例
下面的嵌入式SQL示例返回一个主机变量,该变量包含示例的Home_State
列中列出的所有值的逗号分隔列表。
以字母A
开头的人名表:
ClassMethod ListFunction()
{
&sql(SELECT LIST(Home_State)
INTO :statelist
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A')
w "The states are:",!,statelist
}
代码语言:javascript复制DHC-APP>d ##class(PHA.TEST.SQLCommand).ListFunction()
The states are:
AR,AL,AZ,AZ,AZ,AR,AL,AZ,AR,AL,AL,AR
注意,这个列表包含重复的值。
下面的嵌入式SQL示例返回一个主机变量,该变量包含示例的Home_State
列中列出的所有不同(唯一)值的逗号分隔列表。
以字母A开头的人名表:
ClassMethod ListFunction1()
{
&sql(SELECT LIST(DISTINCT Home_State)
INTO :statelist
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A')
w "The distinct states are:",!,statelist
}
代码语言:javascript复制DHC-APP> d ##class(PHA.TEST.SQLCommand).ListFunction1()
The distinct states are:
AR,AL,AZ
下面的SQL示例为每个州创建了一个逗号分隔的列表,其中包含在Home_City
列中找到的所有值,以及按州列出的这些城市值的计数。
每个Home_State
行包含该状态的所有Home_City
值的列表。
这些名单可能包括重复的城市名称:
SELECT Home_State,
COUNT(Home_City) AS CityCount,
LIST(Home_City) AS ListAllCities
FROM Sample.Person
GROUP BY Home_State