第七章 SQL聚合函数 LIST
文章目录
- 第七章 SQL聚合函数 LIST
- 大纲
- 参数
- 描述
- 包含逗号的数据值
- LIST 和 %SelectMode
- LIST 和 ORDER BY
- 最大列表大小
- 相关的聚合函数
- 示例
第七章 SQL聚合函数 LIST
创建逗号分隔值列表的聚合函数。
大纲
LIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])
参数
ALL
- 可选-指定LIST
返回string-expr
的所有值的列表。
如果没有指定关键字,这是默认值。DISTINCT
- 可选-一个DISTINCT
子句,指定LIST
返回一个仅包含唯一的string-expr
值的列表。
DISTINCT
可以指定BY(colo -list)
子句,其中colo -list
可以是单个字段,也可以是用逗号分隔的字段列表。string-expr
- 计算结果为字符串的SQL表达式。
通常是所选表中列的名称。%FOREACH(col-list)
- 可选-列名或以逗号分隔的列名列表。%AFTERHAVING
- 可选-应用在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 :statelistFROM Sample.PersonWHERE Home_State %STARTSWITH 'A')w "The states are:",!,statelist
}
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 :statelistFROM Sample.PersonWHERE Home_State %STARTSWITH 'A')w "The distinct states are:",!,statelist
}
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
也许更有用的方法是在Home_City
列中列出每个州的不同值,用逗号分隔,如下所示:
SELECT Home_State,COUNT(DISTINCT Home_City) AS DistCityCount,COUNT(Home_City) AS TotCityCount,LIST(DISTINCT Home_City) AS DistCitiesList
FROM Sample.Person
GROUP BY Home_State
注意,这个示例返回每个州的不同城市名称和总城市名称的整数计数。
下面的示例返回以“A”
开头的Home_State
值列表。
它返回不同的Home_State
值(distinct Home_State
);
与不同的Home_City
值(distinct BY(Home_City
) Home_State
)相对应的Home_State
值,这可能包括一个唯一的Home_City NULL
;
和所有Home_State
值:
SELECT LIST(DISTINCT Home_State) AS DistStates,LIST(DISTINCT BY(Home_City) Home_State) AS DistCityStates,LIST(Home_State) AS AllStates
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A'
下面的动态SQL示例使用%SelectMode
属性为DOB
日期字段返回的值列表指定ODBC显示模式:
ClassMethod ListFunction2()
{s myquery = "SELECT LIST(DOB) AS DOBs FROM Sample.Person WHERE Name %STARTSWITH 'A'"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=1s qStatus = tStatement.%Prepare(myquery)if qStatus'=1 {w "%Prepare failed:" d $System.Status.DisplayError(qStatus) q}s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).ListFunction2()
DOBs
1973-06-17,1943-05-22,1943-04-21,2011-07-07,1993-10-05,1953-02-25,1968-11-181 Rows(s) Affected
End of data
下面的动态SQL示例使用%FOREACH
关键字。
它为每个不同的Home_State
返回一行,其中包含该Home_State
的年龄值列表:
ClassMethod ListFunction3()
{s myquery = 3s myquery(1) = "SELECT DISTINCT Home_State,"s myquery(2) = "LIST(Age %FOREACH(Home_State)) AgesForState "s myquery(3) = "FROM Sample.Person WHERE Home_State %STARTSWITH 'M'"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=1s qStatus = tStatement.%Prepare(.myquery)if qStatus'=1 {w "%Prepare failed:" d $System.Status.DisplayError(qStatus) q}s rset = tStatement.%Execute()d rset.%Display()w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).ListFunction3()
Home_State AgesForState
MA 55
MD 10,36,31,85,10,94,28
ME 25,20,55,11
MI 11,75,46,17,71
MN 11,43,73,98
MO 77,33,42,55,89,26,87,45,34
MS 7,25,13
MT 4,35,54,6,238 Rows(s) Affected
End of data
下面的示例使用了%AFTERHAVING
关键字。
它为每个Home_State
返回一行,其中至少包含一个满足HAVING
子句条件的Name
值(以“M”
开头的名称)。
第一个LIST
函数返回该状态的所有名称的列表。
第二个LIST
函数返回的列表只包含满足HAVING
子句条件的名称:
SELECT Home_State,LIST(Name) AS AllNames,LIST(Name %AFTERHAVING) AS HavingClauseNamesFROM Sample.PersonGROUP BY Home_StateHAVING Name LIKE 'M%'ORDER BY Home_State
第七章 SQL聚合函数 LIST相关推荐
- 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP
文章目录 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP 大纲 参数 描述 当前事务期间所做的更改 示例 第十二章 SQL聚合函数 VARIANCE, VAR_SAM ...
- 第五章 SQL聚合函数 %DLIST
文章目录 第五章 SQL聚合函数 %DLIST 大纲 参数 描述 %DLIST 和 %SelectMode %DLIST和ORDER BY 相关的聚合函数 示例 第五章 SQL聚合函数 %DLIST ...
- 第十三章 SQL聚合函数 XMLAGG
文章目录 第十三章 SQL聚合函数 XMLAGG 大纲 参数 描述 XML和XMLAGG XMLAGG和ORDER BY 相关聚合函数 示例 第十三章 SQL聚合函数 XMLAGG 一个聚合函数,它创 ...
- 第二章 SQL聚合函数 AVG
文章目录 第二章 SQL聚合函数 AVG 大纲 参数 描述 数据值 对单个值求平均值 优化 当前事务期间所做的更改 示例 第二章 SQL聚合函数 AVG 返回指定列值的平均值的聚合函数. 大纲 AVG ...
- 第九章 SQL聚合函数 MIN
文章目录 第九章 SQL聚合函数 MIN 大纲 参数 描述 数据值 在当前事务期间所做的更改 示例 第九章 SQL聚合函数 MIN 返回指定列中的最小数据值的聚合函数. 大纲 MIN([ALL | D ...
- 第三章 SQL聚合函数 COUNT(一)
文章目录 第三章 SQL聚合函数 COUNT(一) 大纲 参数 描述 没有行返回 流字段 第三章 SQL聚合函数 COUNT(一) 返回表或指定列中的行数的聚合函数. 大纲 COUNT(*)COUNT ...
- 第四章 SQL聚合函数 COUNT(二)
文章目录 第四章 SQL聚合函数 COUNT(二) 权限 性能 未提交事务所做的更改 示例 第四章 SQL聚合函数 COUNT(二) 权限 要使用COUNT(*),必须对指定的表具有表级别的SELEC ...
- 第十一章 SQL聚合函数 SUM
文章目录 第十一章 SQL聚合函数 SUM 大纲 参数 描述 数据值 优化 当前事务期间所做的更改 示例 第十一章 SQL聚合函数 SUM 返回指定列值之和的聚合函数. 大纲 SUM([ALL | D ...
- SQL 聚合函数一定要跟group by以及NULL的关系的案例精讲
SQL 聚合函数与GROUP BY NULL的关系及ALL的使用说明 需求说明 有如下一道SQL题,网友咨询: 1 为啥正确答案是第二项? 2 聚合函数是否一定要跟GROUP BY PARTITION ...
最新文章
- VC提前注入.net软件的方法
- C#WinForm App自动更新(Live Update)架构
- 如何限制并发的 异步IO 请求数量?
- html中怎么写jq,用jQuery替换HTML页面中的文本
- Mysql Explain的简单使用
- pg_resetxlog清理的pg_xlog下的WAL日志
- centos mysql自动备份_CentOS下每天自动备份mysql数据库
- 信息学奥赛一本通(1241:二分法求函数的零点)
- Spark算子与RDD基本转换
- QA面试题:之一(中英文题目、难度:简单)
- ElasticSearch系列之什么是ElasticSearch?
- [数字图像处理]频域滤波(2)--高通滤波器,带阻滤波器与陷波滤波器
- 新唐(Nuvoton)8051单片机开发指南
- Supermap机器学习功能实操
- OpenCV显示中文字体
- Alignedreid项目源码分析
- 定投基金,如何计算年化收益率
- 帆软填报-根据角色/权限设置校验规则(含开关配置表校验)
- 采用 redis主从 + 哨兵(sentinel) + vip漂移搭建一套redis高可用集群
- 从零开始设计一个漂亮的网页(译)
热门文章
- 【OpenCV-Python】28.OpenCV的特征检测——特征点检测
- R语言dplyr包警告/报错`summarise()` ungrouping output (override with `.groups` argument)的原因和解决办法
- 基于PC虚拟机构建家用Linux服务器
- 【电子方案设计】小型便携式制氧机方案
- 计算机网络 交换机配置,计算机网络-交换机基本配置
- mesh(三角面片)数据解析
- MySQL自带的加密AES_ENCRYPT()解密AES_DECRYPT()
- 卷积神经网络可视化理解
- 解决word分栏左边未填充满就换到右边去
- SVN提交代码冲突解决方法总结