VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

GROUP_ID

功能描述

在Oracle兼容模式下,Vastbase G100支持使用GROUP_ID函数。该函数可以返回一个整型值,用于标识由GROUP BY子句所返回的唯一重复组。

对于首次出现的分组,GROUP_ID的值为0;对于重复的分组, GROUP_ID的值从1开递增。(例如:有n个重复组,则用0至n-1标识分组。)

语法格式

SELECT grouping_element[,grouping_element],group_id() as group_id
[expression]
FROM table_name
[WHERE condition]
GROUP BY expr;

参数说明

  • grouping_element

    参与查询的字段名,或者含有函数/表达式的列。

  • expression

    SQL语句中的子查询。

  • table_name

    查询指定的表名。

  • WHERE condition

    WHERE子句指定的查询条件。

  • expr

    查询依据的分组规则,可以是字段名或者含有函数/表达式的列。

注意事项

  • 该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。
  • 该函数仅适用于包含GROUP BY子句的SELECT语句。

示例

示例1:group by分组方式为CUBE的查询

CUBE是自动对group by子句中列出的字段进行分组汇总,结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。它会为每个分组返回一行汇总信息,用户可以使用CUBE来产生交叉表值。比如,在CUBE子句中给出三个表达式(n =3),运算结果为2^n= 2^3 = 8组。以n个表达式的值分组的行称为常规行,其余的行称为超级聚集行。

1、创建并切换至兼容模式为A的数据库下。

CREATE DATABASE db_oracle DBCOMPATIBILITY 'A';
\c db_oracle

2、创建测试表并插入数据。

CREATE TABLE t_groupid(a int,b int);
INSERT INTO t_groupid VALUES(1,1),(1,1),(2,2),(2,2),(3,3),(3,null);

3、使用包含GROUP_ID函数的语句进行查询。

select a,b,group_id() as group_id from t_groupid group by cube((a,b),a);

返回结果为:

 a | b | group_id
---+---+----------
 1 | 1 |        0
 1 | 1 |        1
 1 |   |        0
 2 | 2 |        0
 2 | 2 |        1
 2 |   |        0
 3 | 3 |        0
 3 | 3 |        1
 3 |   |        0
 3 |   |        1
 3 |   |        0
   |   |        0
(12 rows)

示例2:grouping_element中包含函数的查询

1、创建并切换至兼容模式为A的数据库下。

create database db_1103518 dbcompatibility 'B';
\c db_1103518

2、创建测试表并插入数据。

create table t_groupid(id number(10),name varchar2(10),sex varchar2(10),sala number(10));
insert into t_groupid values(1,'w','man',5000);
insert into t_groupid values(1,'w','man',5000);
insert into t_groupid values(1,'w','lady',5000);
insert into t_groupid values(1,'m','lady',5000);
insert into t_groupid values(2,'m','lady',5000);
insert into t_groupid values(3,'f','man',7500);
insert into t_groupid values(4,'f','lady',7500);

3、使用包含GROUP_ID函数的语句进行查询。

select id, name, sex, sum(sala),group_id() from t_groupid group by rollup((id,name), name, sex);

返回结果为:

 id | name | sex  |  sum  | group_id
----+------+------+-------+----------
  1 | m    | lady |  5000 |        0
  1 | m    |      |  5000 |        0
  1 | m    |      |  5000 |        1
  1 | w    | lady |  5000 |        0
  1 | w    | man  | 10000 |        0
  1 | w    |      | 15000 |        0
  1 | w    |      | 15000 |        1
  2 | m    | lady |  5000 |        0
  2 | m    |      |  5000 |        0
  2 | m    |      |  5000 |        1
  3 | f    | man  |  7500 |        0
  3 | f    |      |  7500 |        0
  3 | f    |      |  7500 |        1
  4 | f    | lady |  7500 |        0
  4 | f    |      |  7500 |        0
  4 | f    |      |  7500 |        1
    |      |      | 40000 |        0
(17 rows)