TDengine在带有MAX() 的SELECT语句中,如何处理未在聚合函数中的列?
我在使用TDengine 3.3.6.13,并且有一个关于聚合函数的问题。
当我执行下面的查询:
SELECT MAX(a), b FROM my_table
我想知道查询结果中的b 列是否对应于a 取到最大值的那一行?
例如,如果我的表包含:
idab15"x"210"y"33"z"
结果会是10, "y"(a=10的那一行),还是会对 MAX(a) 返回10,而对b 返回其他值?
我查看了TDengine函数列表文档,其中写道:
标量函数对查询结果中的每一行返回一个结果行。
但这并没有清楚地解释在与聚合函数(如 MAX())组合时,非聚合列的行为。
环境:
- TDengine版本:3.3.6.13
- 部署:Docker
解决方案
在TDengine中,MAX() 被文档化为一个选择函数,而不仅仅是一个ANSI语义上的普通SQL聚合。选择函数根据函数的语义从输入结果集选择行,TDengine允许从选中的行返回其他列的值。
因此,对于你的示例,预期的结果是:
10, "y"
因为 "y" 来自于 a = 10 所在的那一行。
也就是说,我会把这点写清楚,而不是依赖那种看起来模糊的形式:
SELECT MAX(a), COLS(MAX(a), b)
FROM my_table;
COLS() 的设计初衷是从通过单行选择函数(如 MAX())所选中的那一行中返回其他列的值。
需要注意的一点是:如果有多行具有相同的最大值在 a,除非TDengine对该情形给出确定性的并列排序规则,请不要假设将返回哪一行的 b 值。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。