精彩SQL

HGSQL是一个完全自主开发的分布式异构数据库引擎,它在标准SQL的基础上做了扩充,以下是几条精彩sql,与大家共享:

星造型

--------------------------------------------

select space(abs(f1)) + strn('*', 11 - abs(f1*2)) xin from serial(-5,5);

+-------------+

| XIN         |

+-------------+

|      *      |

|     ***     |

|    *****    |

|   *******   |

|  *********  |

| *********** |

|  *********  |

|   *******   |

|    *****    |

|     ***     |

|      *      |

+-------------+

 

九九乘法表

--------------------------------------------

select to_int(s1.f1 * s2.f1) f1,

       to_int(s1.f1 * s2.f2) f2,

       to_int(s1.f1 * s2.f3) f3,

       to_int(s1.f1 * s2.f4) f4,

       to_int(s1.f1 * s2.f5) f5,

       to_int(s1.f1 * s2.f6) f6,

       to_int(s1.f1 * s2.f7) f7,

       to_int(s1.f1 * s2.f8) f8,

       to_int(s1.f1 * s2.f9) f9

  from serial(1, 9) s1,

       invert(serial(1, 9)) s2

+----+----+----+----+----+----+----+----+----+

| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |

+----+----+----+----+----+----+----+----+----+

|  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |

|  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 | 18 |

|  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 | 27 |

|  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |

|  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |

|  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |

|  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |

|  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |

|  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |

+----+----+----+----+----+----+----+----+----+

 

日历

--------------------------------------------

select case('(s.f1 * 7) + 1 - b.f1 > 0 and (s.f1 * 7) + 1 - b.f1 <= e.f1', (s.f1 * 7) + 1 - b.f1, '') ,

       case('(s.f1 * 7) + 2 - b.f1 > 0 and (s.f1 * 7) + 2 - b.f1 <= e.f1', (s.f1 * 7) + 2 - b.f1, '') ,

       case('(s.f1 * 7) + 3 - b.f1 > 0 and (s.f1 * 7) + 3 - b.f1 <= e.f1', (s.f1 * 7) + 3 - b.f1, '') ,

       case('(s.f1 * 7) + 4 - b.f1 > 0 and (s.f1 * 7) + 4 - b.f1 <= e.f1', (s.f1 * 7) + 4 - b.f1, '') ,

       case('(s.f1 * 7) + 5 - b.f1 > 0 and (s.f1 * 7) + 5 - b.f1 <= e.f1', (s.f1 * 7) + 5 - b.f1, '') ,

       case('(s.f1 * 7) + 6 - b.f1 > 0 and (s.f1 * 7) + 6 - b.f1 <= e.f1', (s.f1 * 7) + 6 - b.f1, '') ,

       case('(s.f1 * 7) + 7 - b.f1 > 0 and (s.f1 * 7) + 7 - b.f1 <= e.f1', (s.f1 * 7) + 7 - b.f1, '')

  from serial(0, 5) s,

       (select day_of_week(2007 + '-' + 2 + '-' + 1) - 1 f 1) b join

       (select month_days(2007, 2) f1) e on 1=1

+----+----+----+----+----+----+----+

| | | | | | | |

+----+----+----+----+----+----+----+

|    |    |    |    |  1 |  2 |  3 |

| 4  | 5  | 6  | 7  |  8 |  9 | 10 |

| 11 | 12 | 13 | 14 | 15 | 16 | 17 |

| 18 | 19 | 20 | 21 | 22 | 23 | 24 |

| 25 | 26 | 27 | 28 |    |    |    |

|    |    |    |    |    |    |    |

+----+----+----+----+----+----+----+

 

姓名树

--------------------------------------------

select space((level - 1) * 4) + '|-' + 姓名 层姓名

  from nest(query('员工'), 'prior.员工.编号 = 员工.上级', '上级 is null', '编号')

+--------------------+

| 层姓名             |

+--------------------+

| |-刘程飞           |

|     |-孔兵         |

|         |-王芳     |

|             |-宋建 |

|         |-刘海星   |

|             |-王东 |

|     |-张云         |

|         |-李海卫   |

|         |-张空     |

|         |-刘龙维   |

|         |-张凯     |

|         |-李保     |

|     |-关心         |

|         |-赵新     |

+--------------------+

 

序列

--------------------------------------------

select f1 from serial(1,10,2,'h','g')

+-----+

| F1  |

+-----+

| h 1g |

| h 3g |

| h 5g |

| h 7g |

| h 9g |

+-----+

 

字符串转记录(分割符分割)

--------------------------------------------

select * from split('a,b,c,d',',')

+----+

| F1 |

+----+

| a  |

| b  |

| c  |

| d  |

+----+

 

字符串转记录(等长分割)

--------------------------------------------

select * from splitn('1234567890','3')

+-----+

| F1  |

+-----+

| 123 |

| 456 |

| 789 |

| 0   |

+-----+

取得一段字符串

--------------------------------------------

select getseg('a,b,c',',',2)

+-----------------------+

| GETSEG('a,b,c',',',2) |

+-----------------------+

| b                     |

+-----------------------+

修改一段字符串

--------------------------------------------

select setseg('a,b,c',',',2, 'hg')

+-----------------------------+

| SETSEG('a,b,c',',',2, 'hg') |

+-----------------------------+

| a,hg,c                      |

+-----------------------------+

 

多维合计

--------------------------------------------

SELECT 部门,职位,SUM(工资) 工资 FROM 员工 GROUP BY CUBE(部门,职位)

+------+--------+-------+

| 部门 | 职位   | 工资  |

+------+--------+-------+

| 20   | 职员   |  1900 |

| 20   | 经理   |  2975 |

| 20   | 主管   |  6000 |

| 30   | 销售   |  5600 |

| 30   | 经理   |  2850 |

| 30   | 职员   |   950 |

| 10   | 经理   |  2450 |

| 10   | 总经理 |  5000 |

| 10   | 职员   |  1300 |

| 20   |        | 10875 |

| 30   |        |  9400 |

| 10   |        |  8750 |

|      | 职员   |  4150 |

|      | 销售   |  5600 |

|      | 经理   |  8275 |

|      | 主管   |  6000 |

|      | 总经理 |  5000 |

|      |        | 29025 |

+------+--------+-------+

 

交叉统计

--------------------------------------------

select * from cross(query('员工'), '部门','职位','工资','sum', 'true','合计')

+-----------+---------+--------+--------+---------+

| 职位/部门 | 20      | 10     | 30     | STAT    |

+-----------+---------+--------+--------+---------+

| 职位/部门 | 20      | 10     | 30     |    合计 |

| 主管      | 6000    |        |        |    6000 |

| 总经理    |         | 5000   |        |    5000 |

| 经理      | 2975    | 2450   | 2850   |  8275.0 |

| 职员      | 1900    | 1300   | 950    |  4150.0 |

| 销售      |         |        | 5600   |    5600 |

| 合计      | 10875.0 | 8750.0 | 9400.0 | 29025.0 |

+-----------+---------+--------+--------+---------+

 

指定记录范围查询

--------------------------------------------

select * from 员工 where rowno() between 3 and 7

+------+--------+------+------+------------+------+------+------+

| 编号 | 姓名   | 职位 | 上级 | 出生日期   | 工资 | 奖金 | 部门 |

+------+--------+------+------+------------+------+------+------+

| 0003 | 张空   | 销售 | 0006 | 1982-08-07 | 1250 |  500 | 30   |

| 0004 | 孔兵   | 经理 | 0009 | 1982-03-01 | 2975 |      | 20   |

| 0005 | 刘龙维 | 销售 | 0006 | 1982-10-13 | 1250 | 1400 | 30   |

| 0006 | 张云   | 经理 | 0009 | 1977-02-14 | 2850 |      | 30   |

| 0007 | 关心   | 经理 | 0009 | 1978-07-27 | 2450 |      | 10   |

+------+--------+------+------+------------+------+------+------+

 

导出插入sql

--------------------------------------------

select insert_sql('XML.部门');

--------------------------------------------

insert into XML.部门 (编号, 名称, 备注) values ('10', '财务部', '');

insert into XML.部门 (编号, 名称, 备注) values ('40', '行政部', '');

insert into XML.部门 (编号, 名称, 备注) values ('20', '开发部', '');

insert into XML.部门 (编号, 名称, 备注) values ('30', '销售部', '');

 

字符串合计

--------------------------------------------

select strsum(编号,',') from 部门;

+------------------+

| STRSUM(编号,',') |

+------------------+

| 10,40,20,30      |

+------------------+

 

代码转名称

--------------------------------------------

select map((select 编号,名称 from 部门), '10')

+-----------------------------------------+

| MAP((SELECT 编号,名称 FROM 部门), '10') |

+-----------------------------------------+

| 财务部                                  |

+-----------------------------------------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值