本章节主要介绍 DM 数据库查询结果排序使用技巧及案例。案例包括:按子串排序、字符串替换、字符串混合排序及按指定列排序。
一、适用场景
软件 | 版本 |
---|---|
操作系统 | Redhat 7 及以上版本 |
DM 数据库 | DM 8.0 及以上版本 |
CPU 架构 | x86、ARM、龙芯、飞腾等国内外主流 CPU |
二、操作方法
2.1 以指定的次序返回查询结果
为提高查询结果可读性,我们可以对查询结果按照一定顺序排列,例如:按员工生日进行升序排列。示例语句如下所示:
SELECT employee_name, hire_date
FROM dmhr.employee
WHERE ROWNUM < 5
ORDER BY hire_date ASC;
输出结果如下图所示:
也可以将列名替换成数字,例如 ORDER BY 2 ASC
,意思是按第二列进行升序排序。示例语句如下所示:
SELECT employee_name, hire_date
FROM dmhr.employee
WHERE ROWNUM < 5
ORDER BY 2 ASC;
2.2 按多个字段排序
如果想实现按照员工编号升序,薪资降序进行排列,可以在 order by
后加两列,并分别标明 ASC, DESC
。其中 ASC 表示升序,DESC 表示降序。示例语句如下所示:
SELECT employee_name, hire_date, salary
FROM dmhr.employee
WHERE ROWNUM < 5
ORDER BY 2 ASC, 3 DESC;
输出结果如下图所示:
注意多列排序,若前面的列有重复(如 hairdate = '2002-05-02' 有 6 行数据)后面的排序才有用。即先通过前面的列将数据分组,再按照后面的列进行排序。
2.3 按子串排序
如果想按照客户手机号尾号的顺序排列,缩小查询范围,可以通过如下函数实现子串排序。示例语句如下所示:
SELECT EMPLOYEE_NAME AS 姓名, SUBSTR (PHONE_NUM, -4) AS 尾号
FROM dmhr.employee
WHERE ROWNUM < 5
ORDER BY 2;
输出结果如下图所示:
由此可见,只要能将数据查询出来,就能够对输出结果按照相应的要求进行排序。
2.4 TRANSLATE 应用
TRANSLATE 应用广泛,可实现字符替换。语法格式如下:
TRANSLATE(expr,from_string,to_string)
from_string 与 to_string 以字符为单位,对应字符逐个替换。示例语句如下所示:
SELECT TRANSLATE ('ab你好bcadefg', 'abcdefg', '1234567') AS new_str FROM DUAL;
输出结果如下图所示:
如果 to_string 为空,则直接返回空值。示例语句如下所示:
SELECT TRANSLATE('ab你好bcadefg','abcdefg','') AS new_str FROM DUAL;
输出结果如下图所示:
如果 to_string 对应的位置没有字符,from_string 中列出的字符将会被删除。示例语句如下所示:
SELECT TRANSLATE('ab你好bcadefg','1abcdefg','1') AS new_str FROM DUAL;
输出结果如下图所示:
2.5 按数字和字母混合字符串中的字母排序
为了实现混合字符串排序,首先需创建如下视图:
CREATE OR REPLACE VIEW v AS
SELECT postal_code || ' ' || city_id AS data FROM dmhr.location;
查询视图信息,示例语句如下所示:
SELECT * FROM v;
我们可以使用 translate 替换功能,把数字和空格都替换为空,然后再进行排序。示例语句如下所示:
SELECT data, TRANSLATE (data, '- 0123456789', '-') AS oper_type
FROM v
WHERE ROWNUM < 5
ORDER BY 2;
输出结果如下图所示:
2.6 根据指定条件排序
如需将工资在 6000~8000 之间的员工排列在靠前位置,以便优先查看。我们可以在查询中新生成一列,实现指定条件排序。示例语句如下所示:
SELECT job_title AS 职务,
CASE WHEN min_salary >= 6000 AND min_salary <= 8000 THEN 1 ELSE 2 END
AS 级别,
min_salary AS 工资
FROM dmhr.job
WHERE ROWNUM < 5
ORDER BY 2, 3;
输出结果如下图所示:
三、参考文献
更多 SQL 语言使用说明,请参考《DM8_SQL 语言使用手册》,手册位于数据库安装路径 /dmdbms/doc
文件夹下。如有其他问题,请在社区内咨询。