文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

聚合函数支持场景扩展

可获得性

本特性自MogDB 5.0.0版本开始引入。

特性简介

支持包含order by不含group by的Aggregate函数。

客户价值

增强MogDB与Oracle的兼容性,减少应用程序的迁移代价。

特性描述

对于含有Aggregate函数的SQL查询,如果包含order by子句,必须要求order by的排序列在group by子句中,否则会直接报错退出。因此如果不包含group by子句,包含order by子句时,会校验失败报错退出。本特性对这种场景的查询进行了适配支持。

示例

-- 普通Agg函数
CREATE TABLE tt01(a INT, b INT);
SELECT SUM(a) FROM tt01 ORDER BY a;  --success
SELECT SUM(a) FROM tt01 ORDER BY b;  --success
SELECT SUM(a) FROM tt01 GROUP BY a ORDER BY a;  --success
SELECT SUM(a) FROM tt01 GROUP BY b ORDER BY a;  --failed
SELECT a, SUM(a) FROM tt01; --failed
SELECT b, SUM(a) FROM tt01; --failed
SELECT SUM(a) FROM tt01;  --success

-- Listagg函数
CREATE TABLE tt02(deptno INT, name VARCHAR);
SELECT listagg(name, ',') within GROUP(ORDER BY name) FROM tt02 ORDER BY name;  --success
SELECT listagg(name, ',') within GROUP(ORDER BY name) FROM tt02 ORDER BY deptno; --success
SELECT listagg(name, ',') within GROUP(ORDER BY name) FROM tt02 GROUP BY deptno ORDER BY deptno;  --success
SELECT listagg(name, ',') within GROUP(ORDER BY name) FROM tt02 GROUP BY deptno ORDER BY name;    --failed
SELECT name, listagg(name, ',') within GROUP(ORDER BY name) FROM tt02;  --failed
SELECT deptno, listagg(name, ',') within GROUP(ORDER BY name) FROM tt02;  --failed
SELECT listagg(name, ',') within GROUP(ORDER BY name) FROM tt02;   --success
Copyright © 2011-2024 www.enmotech.com All rights reserved.