加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql 常用速查

发布时间:2020-12-13 16:11:50 所属栏目:百科 来源:网络整理
导读:/**gp中的基本sql语法**/--删除表drop table testtb;--创建表CREATE TABLE testtb( id integer,"name" character varying(2))WITH ( OIDS=FALSE)DISTRIBUTED BY (id);ALTER TABLE testtb OWNER TO gpadmin;--WITH 用来说明表的存储属性,比如表的压缩--DISTR
/**gp中的基本sql语法**/
--删除表
drop table testtb;
--创建表
CREATE TABLE testtb
(
  id integer,"name" character varying(2)
)
WITH (
  OIDS=FALSE
)
DISTRIBUTED BY (id);
ALTER TABLE testtb OWNER TO gpadmin;
--WITH 用来说明表的存储属性,比如表的压缩
--DISTRIBUTED BY 定义表的分布键,这个键最好唯一,如果表中没有唯一键字段,可以定义DISTRIBUTED RANDOMLY作为分布建。

--表的创建
create table testTBbak (like testTB)                                  -- like 复制表结构
create table testtbbak1 as select * from testtb distributed by (name) -- 数据保留,可以指定分布键。
select * into testtbbak2 from testTB                                  -- into 保留数据,不能指定分布键
select * from testtbbak2

/**分区表**/
-- 按照时间分区

-- 

--创建视图
create view v_testtb as select * from testtb

-- 删除数据
delete from testtb -- 速度慢,会写日志。
truncate testtb    -- 速度快,但不会写日期。

/**序列的使用**/
--删除序列
drop sequence myseq
--创建序列(1是开始值,可以根据实际情况改变)
create sequence myseq start 1
--序列的使用
insert into testTB values(nextval('myseq'),'小明')
--重新设置序列值
select setval('myseq',1)
--查询
select id,name from testTB order by 1

-- explain 用于查看sql执行计划
explain select * from testtb 

/**字符串函数**/
-- || 字符串连接
select '胡' || '黄' || '腾'
-- length 字符长度
select length('89998')
-- substring 字符串截取,从那位开始,截几位
select substring('123456' from 2 for 3)
-- trim去字符前后空格
select trim(' 234 fds   ')
-- lowere 字符转小写
select lower('RER')
-- upper 字符转大写
select upper('rer')
-- replace 替换字符
select replace('aabbddee','aa','mm')
-- position 查找指定字符位置
select position('de' in 'abdeaf')
-- split_part 根据指定字符查找给定字符的位置
select split_part('aaa|bbb|ccc|eee','|',2)

/**时间的函数**/
-- age求俩日期之差
select age(timestamp '1987-12-03',timestamp '2015-06-17')
-- age如果一个日期则和当前日期求差
select age(timestamp '1987-12-03')
-- current_date 当前日期
select current_date
-- current_time 当前时间
select current_time
-- current_timestamp 当前时间戳
select current_timestamp
-- now 当前时间
select now()
-- extract 获取指定时间的具体某个参数
select extract(day from date '2015-06-18')
select extract(day from now())
-- 时间相加
select '2015-04-2 10:00:52'::timestamp + interval '10 days 2 hours 10 seconds' 
-- 时间相减
select current_date - interval '10 days'



/**gp中其他函数**/
-- greatest 取两值中的最大值
select greatest(3,9)
-- 列转行
insert into testtb(id,name)values (1,'ha');
insert into testtb(id,'he');
insert into testtb(id,'hi');
insert into testtb(id,name)values (2,'xb');
insert into testtb(id,'xh');
insert into testtb(id,'xm');
select id,string_agg(name,'|' order by name) from testtb group by id;
-- 行转列
select id,regexp_split_to_table(string_agg,E'|') str from texttb_m

/**开窗函数**/
--建表
create table empsalary
(
  depname varchar(20),empno integer,salary integer
) 
distributed by (empno)

insert into empsalary values ('develop',9,4500);
insert into empsalary values ('develop',1,3200);
insert into empsalary values ('develop',4,1000);
insert into empsalary values ('develop',2,9100);
insert into empsalary values ('develop',6,1000);
insert into empsalary values ('person1',5,3100);
insert into empsalary values ('person1',7,4100);
insert into empsalary values ('sales',3,2400);
insert into empsalary values ('sales',8,1200);
insert into empsalary values ('sales',10,5100);

-- rank 及 row_number 函数的应用
select depname,empno,salary,rank() over (partition by depname order by salary desc),row_number() over (partition by depname order by salary desc)
from empsalary
-- rank 识别重复记录
-- row_number 不识别重复记录

select *,sum(salary) over () sum1,sum(salary) over (order by salary) sum2,sum(salary) over (partition by depname) sum3,sum(salary) over (partition by depname order by salary) sum4
 from empsalary

-- grouping by 的使用(其实就是简化了union)
select depname,sum(empno)
from empsalary
group by depname
union all
select depname,sum(salary)
from empsalary
group by depname

--等效于
select depname,sum(empno),sum(salary)
from empsalary 
group by grouping sets(depname)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读