文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

ORDER BY/GROUP BY场景兼容

可获得性

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

特性简介

本特性对查询语句ORDER BY/GROUP BY子句支持的场景进行了扩展,兼容部分Oracle功能。

客户价值

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

特性描述

ORDER BY场景兼容

  • 兼容Oracle的ORDER BY使用场景,支持通过DISTINCT关键字对数据去重。
  • 支持ORDER BY中使用数字代替投影列。
  • 支持ORDER BY中使用常量字符串,此时常量无实际意义,不影响排序结果。
  • 支持ORDER BY多列、表达式、聚集函数等。

GROUP BY场景兼容

  • 支持GROUP BY中含空字符串。
  • 支持GROUP BY中使用整数常量,无实际意义,不影响聚集结果。
  • 支持GROUP BY字符串和表达式,无实际意义,不影响排序或聚集结果。

GUC参数behavior_compat_options增加compat_sort_group_column选项,用于控制GROUP/ORDER BY的行为。默认情况下行为和PG一致,配置该参数后,行为和Oracle一致,常量不再影响GROUP/ORDER BY结果集。该参数仅在sql_compatibility参数的值为A时生效。

特性约束

仅支持A兼容模式。

示例

MogDB=# CREATE TABLE t1(aid INT);
CREATE TABLE
MogDB=# CREATE TABLE t2(bid INT);
CREATE TABLE

MogDB=# EXPLAIN (VERBOSE ON, COSTS OFF) SELECT DISTINCT aid FROM t1 JOIN t2 ON aid = bid ORDER BY t1.aid;
                  QUERY PLAN
-----------------------------------------------
 Sort
   Output: t1.aid, t1.aid
   Sort Key: t1.aid
   ->  HashAggregate
         Output: t1.aid, t1.aid
         Group By Key: t1.aid, t1.aid
         ->  Hash Join
               Output: t1.aid, t1.aid
               Hash Cond: (t1.aid = t2.bid)
               ->  Seq Scan on public.t1
                     Output: t1.aid
               ->  Hash
                     Output: t2.bid
                     ->  Seq Scan on public.t2
                           Output: t2.bid
(15 rows)


MogDB=# set behavior_compat_options to compat_sort_group_column;
SET
MogDB=# EXPLAIN (VERBOSE ON, COSTS OFF) SELECT aid, bid, '', count(1) FROM t1 JOIN t2 ON aid = bid GROUP BY aid, bid, '';
                    QUERY PLAN
--------------------------------------------------
 HashAggregate
   Output: t1.aid, t2.bid, (NULL::text), count(1)
   Group By Key: t1.aid, t2.bid, NULL::text
   ->  Hash Join
         Output: t1.aid, t2.bid, NULL::text
         Hash Cond: (t1.aid = t2.bid)
         ->  Seq Scan on public.t1
               Output: t1.aid
         ->  Hash
               Output: t2.bid
               ->  Seq Scan on public.t2
                     Output: t2.bid
(12 rows)

相关页面

behavior_compat_optionsSELECT

Copyright © 2011-2024 www.enmotech.com All rights reserved.