postgresql学习-常用函数

本文深入探讨了SQL的高级特性,包括数值运算、日期格式化、聚合函数、JSON操作、窗口函数及系统字典的使用。通过实例展示了如何进行精确的小数运算、日期时间的格式化显示、数据聚合与排序、数组与JSON的转换,以及如何利用窗口函数进行复杂的数据分析。

--跟java一样,默认取整
select 1/4;
--小数怎么取,这里可以隐私转换
select round(1/4::numeric,2);
--获取
select round(cast(1 as numeric)/cast(4 as numeric),2);

--4.to_char
select to_char(CURRENT_DATE,'yyyy-mm-dd');
select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss');
--9 0跟oracle一样  这个D相当于.
select to_char(125::real, '0999D9');
--聚合函数支持扩展 distinct 和order by 不在sql标准内
select string_agg(ename, ',') from emp;
select string_agg(ename,',' order by ename) from emp;
--转为一个数组
select array_agg(ename) from emp;
select array_agg(ename order by ename) from emp;

--json
SELECT to_json(array_agg(ename) ) FROM emp;
SELECT json_agg(ename) FROM emp;
SELECT row_to_json(emp) FROM emp;
SELECT array_to_json(array_agg(ename)) FROM emp;

--avg min max count sum
select e.deptno,count(1) from emp e group by e.deptno;
select e.deptno,count(1) from emp e group by e.deptno order by e.deptno;
select e.deptno, count(1)
from emp e
group by rollup (e.deptno);

--绝对值 abs等价@
select abs(-1),@'-9.1';
--阶乘
select 4!;


--窗口函数
select e.deptno,
       e.ename,
       row_number() over (),
       rank() over (order by deptno),
       dense_rank() over (order by deptno),
       lead(e.ename) over (order by deptno),
       lag(e.ename) over (order by deptno),
       first_value(e.ename) over (order by deptno)
from emp e;

--生成 默认步长为1
--简写
select generate_series(2,4);
--完整
select * from generate_series(2,4);
--可以设置别名
select s from generate_series(1,10,2) s;
SELECT current_date+num AS dates
FROM generate_series(0, 14, 7)  num;
--每个10小时
select * from generate_series('2019-08-14 00:00'::timestamp,'2019-08-14 12:00','1 hours');



--系统字典
--current_schema返回在搜索路径中的第一个模式名
select current_catalog 数据库名,current_user 当前用户,user 当前用户,
       current_schema 当前模式,session_user 当前会话用户,version() 版本;

--权限查询
SELECT has_table_privilege('emp', 'select');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值