• 1.递归层次查询
  • 2.重复数据过滤
  • 3.COALESCE滤空处理
  • 4.日期、字符转换函数
  • 5.case when条件判断
  • 6.like模糊查询
  • 7.json中作为查询条件及只显示json中相应的key
  • 8.mybatis调用存储过程
  • 9.插入数组字段
  • 10.插入jsonb字段
  • 11.创建表序列技巧
  • 12.聚合函数string_agg与array_agg
  • 13.查询序列值
  • 14.增加修改列
  • 15.数据列联表更新

1.递归层次查询

  • 例:查询代理商及下属代理商
WITH RECURSIVE res AS (SELECTA .agent_idFROMAGENT.AGENT AWHEREA .agent_id = 620UNION ALLSELECTb.agent_idFROMAGENT.AGENT b,resWHEREb.parent_agent_id = res.agent_id
) SELECTagent_id
FROMres
  • 指定查询字段
WITH RECURSIVE res (agent_id,parent_agent_id,agent_name,remark,email,warn
) AS (SELECTA .agent_id,A .parent_agent_id,A .agent_name,A .remark,A .email,A .warnFROMAGENT.AGENT AWHEREA .agent_id = 620UNION ALLSELECTb.agent_id,b.parent_agent_id,b.agent_name,b.remark,b.email,b.warnFROMAGENT.AGENT b,resWHEREb.parent_agent_id = res.agent_id
) SELECTagent_id,parent_agent_id,agent_name,remark,email,warn
FROMres
ORDER BYagent_id ASC

2.重复数据过滤

SELECT*
FROMestate.room A
WHEREctid != (SELECTMAX (ctid)FROMestate.room bWHEREA .unit_id = b.unit_IdAND A .room_number = b.room_number);

3.COALESCE滤空处理

SELECTCOALESCE (MAX(sort_num), 0) + 1 AS maxnum
FROMestate.unit
WHEREbuilding_id = 11

4.日期、字符转换函数

  • to_date,to_char类似oracle

5.case when条件判断

case  dep."type" when 7 then true else false end as isSign

6.like模糊查询

and dept_name like CONCAT('%',#{depName},'%')  

7.json中作为查询条件及只显示json中相应的key

SELECTA .subsql -> 'ver' AS ver,A .subsql
FROM(SELECTguid,jsonb_pretty (config :: jsonb),jsonb_array_elements (config :: jsonb -> 'expands') AS subsqlFROMlog."ConfigLog") A
--WHERE
--  A .subsql @> '{"type":2,"name":"刷卡器"}' :: jsonb
LIMIT 10;
SELECTA .subsql -> 'ver' AS ver,A .subsql
FROM(SELECTguid,jsonb_pretty (config :: jsonb),jsonb_array_elements (config :: jsonb -> 'expands') AS subsqlFROMlog."ConfigLog") A
WHERE--条件 json字段包含"type":2,"name":"刷卡器"的数据A .subsql @> '{"type":2,"name":"刷卡器"}' :: jsonb
LIMIT 10;

8.mybatis调用存储过程

   int bindRoomWithManagementAndDoor(@Param("map") Map<String, Object> map, @Param("deviceIds") List<Integer> deviceIds);
<!--房间绑定管理机、门禁机--><select id="bindRoomWithManagementAndDoor" resultType="java.lang.Integer">SELECT * FROM device.new_wy_manage_device_bind(#{map.depId,jdbcType=INTEGER},#{map.managementGuid,jdbcType=VARCHAR}, #{map.managementName,jdbcType=VARCHAR},#{map.roomId,jdbcType=INTEGER}, #{map.unitId,jdbcType=INTEGER}, #{map.buildingId,jdbcType=INTEGER},<foreach collection="deviceIds" item="deviceId" index="index" open="ARRAY[" close="]" separator=",">#{deviceId}</foreach>)</select>
 <![CDATA[and bw.worker_date  <=#{beginTime}]]>

9.插入数组字段

<result column="devices" property="devices" javaType="java.lang.Integer" typeHandler="com.doordu.soa.service.comm.hadler.ArrayTypeHandler"/>
"devices" int4[],
 #{devices,typeHandler=com.doordu.soa.service.comm.hadler.ArrayTypeHandler}::int4[],

10.插入jsonb字段

<result column="id_pay_rule" property="idPayRule" jdbcType="OTHER" />#{idPayRule,jdbcType=OTHER}::jsonb,        

Json格式

11.创建表序列技巧

serial PRIMARY KEY
DROP TABLE "device"."camera";
CREATE TABLE "device"."camera" ("camera_id" serial PRIMARY KEY,"camera_name" VARCHAR (200) COLLATE "default" NOT NULL,"serial_number" VARCHAR (200) COLLATE "default" NOT NULL,"brand_id" int2 DEFAULT 0 NOT NULL,"create_user" int4 DEFAULT 0 NOT NULL,"create_time" TIMESTAMP (0) DEFAULT (now()) :: TIMESTAMP (0) WITHOUT TIME ZONE
);ALTER TABLE "device"."camera" OWNER TO "ddpguser";COMMENT ON COLUMN "device"."camera"."camera_id" IS '主键';COMMENT ON COLUMN "device"."camera"."camera_name" IS '相机名';COMMENT ON COLUMN "device"."camera"."serial_number" IS '序列号';COMMENT ON COLUMN "device"."camera"."brand_id" IS '品牌';COMMENT ON COLUMN "device"."camera"."create_user" IS '创建人';COMMENT ON COLUMN "device"."camera"."create_time" IS '创建时间';

12.聚合函数string_agg与array_agg

https://blog.csdn.net/u011944141/article/details/78902678
array_agg(expression)
把表达式变成一个数组 一般配合 array_to_string() 函数使用
string_agg(expression, delimiter)
直接把一个表达式变成字符串

CREATE SCHEMA jinbo;
CREATE TABLE jinbo.employee (empno SMALLINT,ename VARCHAR (20),job VARCHAR (20),mgr SMALLINT,hiredate DATE,sal BIGINT,comm BIGINT,deptno SMALLINT
);
INSERT INTO jinbo.employee (empno,ename,job,mgr,hiredate,sal,comm,deptno
)
VALUES(7499,'ALLEN','SALEMAN',7698,'2014-11-12',16000,300,30);INSERT INTO jinbo.employee (empno,ename,job,mgr,hiredate,sal,comm,deptno
)
VALUES(7499,'ALLEN','SALEMAN',7698,'2014-11-12',16000,300,30);INSERT INTO jinbo.employee (empno,ename,job,mgr,hiredate,sal,comm,deptno
)
VALUES(7654,'MARTIN','SALEMAN',7698,'2016-09-12',12000,1400,30);
  • 1.查询同一个部门下的员工且合并起来
    方法1:
select deptno, string_agg(ename, ',') from jinbo.employee group by deptno; deptno |  string_agg
--------+--------------
     20 | JONES
     30 | ALLEN,MARTIN

方法2:

select deptno, array_to_string(array_agg(ename),',') from jinbo.employee group by deptno;deptno | array_to_string
--------+-----------------20 | JONES30 | ALLEN,MARTIN
  • 2、在1条件的基础上,按ename 倒叙合并
select deptno, string_agg(ename, ',' order by ename desc) from jinbo.employee group by deptno;
3、 deptno |  string_agg
4、--------+--------------
5、     20 | JONES
6、     30 | MARTIN,ALLEN
  • 3、按数组格式输出使用 array_agg
select deptno, array_agg(ename) from jinbo.employee group by deptno;deptno |   array_agg
--------+----------------20 | {JONES}30 | {ALLEN,MARTIN}
  • 4、array_agg 去重元素,例如查询所有的部门
select array_agg(distinct deptno) from jinbo.employee;
array_agg
-----------{20,30}
(1 row)

不仅可以去重,还可以排序

select array_agg(distinct deptno order by deptno desc) from jinbo.employee;array_agg
-----------{30,20}
(1 row)

13.查询序列值

select nextval('log.admin_operation_log_id_seq')

14.增加修改列

ALTER TABLE "report"."tunan_fwxxz"
ADD COLUMN "update_time" timestamp DEFAULT now()::timestamp(0) without time zone;alter table  report.ut_estate alter  COLUMN  mpmc  type varchar(100) ; 

15.数据列联表更新

update report.ut_estate a set jwh=b.jwhmc from estate.panyu_jwh b where a.jwhdm=jwhbm;

Postgresql使用技巧相关推荐

  1. PostgreSQL实用技巧

    日志功能 记录慢查询语句 开启慢查询记录功能,执行时间等于或者大于 log_min_duration_statement 设置值的语句会被记录: ALTER database postgres SET ...

  2. postgresql学习_在PostgreSQL中学习这些快速技巧

    postgresql学习 PostgreSQL is one of the most popular open source SQL dialects. One of its main advanta ...

  3. PostgreSQL的常见参数和技巧

    墨墨导读:本文主要详述PostgreSQL的常见参数以及一些技巧. 1. psql命令 1.1 General options 1.1.1- ? 我们可以psql -?或者psql --help看下p ...

  4. 使用 Hasura 和 PostgreSQL 构建后端技巧你会吗

    后端开发通常需要编写多行代码来处理 CRUD.授权和业务逻辑.所有这些代码都需要在项目的整个生命周期内进行测试.调试和维护.这需要开发人员可以用来开发新功能的大量时间.在本文中,您将了解 Hasura ...

  5. PostgreSQL常用SQL优化技巧

    PostgreSQL的SQL优化技巧其实和大多数使用CBO优化器的数据库类似,因此一些常用的SQL优化改写技巧在PostgreSQL也是能够使用的.当然也会有一些不同的地方,今天我们来看看一些在Pos ...

  6. PostgreSQL学习笔记10之性能提升技巧

    一.使用EXPLAIN: PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为关键的.PostgreSQL本身已经包含了一个规划器用于寻找最优规划,我们可以通过使 ...

  7. 基于物化视图优化_「PostgreSQL技巧」PostgreSQL中的物化视图与汇总表比较

    多年来,物化视图一直是Postgres期待已久的功能.他们最终到达了Postgres 9.3,尽管当时很有限.在Postgres 9.3中,当刷新实例化视图时,它将在刷新时在表上保持锁定.如果您的工作 ...

  8. postgresql数据库迁移技巧(降低版本迁移到GreenPlum pg11-pg8)

    工具:navicat12 步骤: 1.创建scheme 2.导出源scheme的结构sql 3.在目标数据库执行源scheme结构sql中创建序列部分 4.直接操作拷贝scheme所有表(使用生成sq ...

  9. PostgreSQL的查询技巧: 零除, GENERATED STORED, COUNT DISTINCT, JOIN和数组LIKE

  10. MySql Povit,[MySQL|Postgresql] Pivot 通用技巧

    在Oracle和 SQLServer 都有現成的PIvot樞紐分析函式可以用 在MySQL 中如果要使用 樞紐分析 怎麼辦... 今天和大家分享如何在MySQL中使用樞紐分析 案例樣本資料: CREA ...

最新文章

  1. linux pcre-devel,ubuntu - 我应该为'pcre-devel'安装什么软件包? - Ubuntu问答
  2. 独家 | 如何手动优化神经网络模型(附链接)
  3. mysql批量加逗号_批量插入数据到数据库的方式
  4. ajax跨域请求Flask后台
  5. 机器学习知识总结系列- 特征工程(1-1)
  6. jQuery - 按回车键触发跳转
  7. c语言怎么把数字倒过来_c语言中如何实现输入一个整数实现倒序输出
  8. 图论:Gale-Shapley算法
  9. ACE admin 后台管理框架
  10. android按钮延迟显示出来,android Toast显示延迟的优化方案
  11. 关于操作系统镜像超过4G的解决办法
  12. Unity 透视相机世界和屏幕坐标系转换
  13. word2010设置护眼背景
  14. javascript 代码转换为 typescript 代码
  15. 空间两直线间最短距离计算公式
  16. 【论文笔记】AVSM:结合了仿射配准和vSVF配准的医学图像配准模型
  17. 关于ES自定义script painless的问题
  18. nz-zorro 主题切换 动态
  19. 身为iOS开发,你是愿意在大公司做凤尾,还是在小公司做鸡头?
  20. Provision,webservice怎么接收dsmp发过来的包?

热门文章

  1. 计算机高手如何操作键盘,从小白到高手 游戏键盘驱动全面解析
  2. 【新知实验室 TRTCIM】实时互动课堂最佳实践
  3. 静态市盈率和动态市盈率
  4. 最新!!2018南京买房政策大全
  5. 在计算机f有关快捷键,电脑快捷键大全
  6. 利用win自带功能让处于同一局域网的两个电脑之间互传文件(速度和本地磁盘间互传相同)
  7. 中国研发经费投入逼近2万亿,保持两位数增速,企业成为主要力量
  8. python将PDF转换成图片(pdf2image的使用)
  9. 互动媒体技术——processing旋转方块(不同角度的旋转)
  10. linux sd卡启动盘制作工具,Sd卡启动盘的制作(EXT2)