支持ORDER BY后接表达式
功能描述
Vastbase G100在Oracle或者MySQL兼容模式下,SELECT DISTINCT | UNIQUE
的查询列表中可以使用ORDER BY子句中未出现的列;ORDER BY子句中支持使用表达式。
注意事项
该功能在数据库兼容模式为Oracle或者MySQL时能够使用(即创建DB时DBCOMPATIBILITY='A'或者'B'),在其他数据库兼容模式下不能使用该特性。
在MySQL兼容模式下,此功能的使用受GUC参数vastbase_sql_mode的控制。MySQL兼容模式下的用法请参考DISTINCT列时可以使用非ORDER BY列,参数介绍请参考vastbase_sql_mode。
语法格式
SELECT DISTINCT | UNIQUE
column_name [, ...]
FROM table_name
[WHERE condition]
ORDER BY expression [ASC|DESC];
参数说明
DISTINCT | UNIQUE
从SELECT的结果集中删除所有重复的行,使结果集中的每行都是唯一的。
column_name
指定子查询结果集中显示的列名。
table_name
表名或视图名,名称前可加上模式名,如:schema_name.table_name。
[ WHERE condition ]
WHERE子句构成一个行选择表达式,用来缩小SELECT查询的范围。
expression
ORDER BY表达式,对SELECT语句检索得到的数据进行排序。
[ ASC | DESC ]
查询结果的排序方式是升序(ASC)还是降序(DESC),默认是升序排列。
更多关于查询语法的详细说明请参考SELECT。
示例
前置条件
1、使用vsql工具连接至客户端。
vsql -d vastbase -p 5432 -r
2、创建并切换至兼容模式为Oracle的数据库下。
CREATE DATABASE db_oracle dbcompatibility='A';
\c db_oracle
示例1: 在ORDER BY子句中使用函数。
1、创建测试表并插入数据。
create table tmp(id int,id1 int);
insert into tmp values(5,15);
insert into tmp values(1,20);
insert into tmp values(null,10);
insert into tmp values(null,8);
insert into tmp values(20,7);
insert into tmp values(null,6);
insert into tmp values(null,4);
insert into tmp values(5,5);
insert into tmp values(null,null);
insert into tmp values(null,null);
insert into tmp values(2,2);
insert into tmp values(2,2);
2、查询测试表内容,并在ORDER BY子句中使用NVL函数。
select distinct id,id1 from tmp order by nvl(id,id1);
返回结果如下:
id | id1
----+-----
1 | 20
2 | 2
| 4
5 | 15
5 | 5
| 6
| 8
| 10
20 | 7
|
(10 rows)
示例2: 在ORDER BY子句中使用算术表达式。
1、创建测试表并插入数据。
create table test_1009(id varchar(32),name varchar(32),source varchar(20));
insert into test_1009 values('1','zhangsan','100');
insert into test_1009 values('1','wanger','100');
insert into test_1009 values('12','lisi','98');
insert into test_1009 values('4','wangwu','78');
insert into test_1009 values('4','lisi','78');
2、查询测试表内容,在ORDER BY子句中使用算术表达式。
select distinct id from test_1009 order by (id+0),(source+0);
返回结果如下:
id
----
1
4
12
(3 rows)