1、postgres中with用法的官方文档地址

http://www.postgres.cn/docs/10/queries-with.html

2、有一张表biz_ticket,建表语句如下

CREATE TABLE "public"."biz_ticket" (
"id" int4 DEFAULT nextval('"crt".biz_ticket_id_seq'::regclass) NOT NULL,
"create_time" timestamp(6),
"type" text COLLATE "default"
)
WITH (OIDS=FALSE)
;ALTER TABLE "public"."biz_ticket" OWNER TO "postgres";COMMENT ON COLUMN "public"."biz_ticket"."id" IS '自增主键';COMMENT ON COLUMN "public"."biz_ticket"."create_time" IS '创建时间';COMMENT ON COLUMN "public"."biz_ticket"."type" IS '类型';

3、向表中插入10条数据

INSERT INTO "biz_ticket" VALUES (1, '2019-9-26 11:06:05', 'REQ');
INSERT INTO "biz_ticket" VALUES (2, '2019-9-26 11:06:50', 'BUG');
INSERT INTO "biz_ticket" VALUES (3, '2019-9-26 11:07:00', 'REQ');
INSERT INTO "biz_ticket" VALUES (4, '2019-9-26 11:07:17', 'OPPTY');
INSERT INTO "biz_ticket" VALUES (5, '2019-9-26 11:07:29', 'BUG');
INSERT INTO "biz_ticket" VALUES (6, '2019-9-26 11:07:58', 'BUG');
INSERT INTO "biz_ticket" VALUES (7, '2019-8-26 11:13:00', 'REQ');
INSERT INTO "biz_ticket" VALUES (8, '2018-9-26 11:13:22', 'REQ');
INSERT INTO "biz_ticket" VALUES (9, '2018-9-26 11:13:49', 'REQ');
INSERT INTO "biz_ticket" VALUES (10, '2019-8-26 11:16:00', 'BUG');

4、需求分析

计算9月份type=''REQ"的占比、同比和环比;

说明:

环比指的是相邻两月(即9月份和8月份)进行比较;

同比指的是历史同期数据(即2019月9月与2018年9月)进行比较。

SQL语句如下:

WITH total_t AS ( -- 临时表:获取9月份数量总数量为:6条SELECTCOUNT (TYPE) AS tcFROMbiz_ticket TWHERE -- 当前时间T .create_time >= '2019-09-01 00:00:00' AND T .create_time <= '2019-09-30 23:59:59'
),type_zbc_t AS ( -- 临时表:获取9月份type='REQ'的数量为:2条SELECTCOUNT (TYPE) AS zbcFROMbiz_ticket TWHERE -- 当前时间 T ."type" = 'REQ'AND T .create_time >= '2019-09-01 00:00:00' AND T .create_time <= '2019-09-30 23:59:59'
) ,
type_hbc_t as( -- 临时表,获取月环比(8月份)type='REQ'数量为:1条SELECTCOUNT (TYPE) AS hbcFROMbiz_ticket TWHERE -- 环比时间T ."type" = 'REQ'AND T .create_time >= '2019-08-01 00:00:00'AND T .create_time <= '2019-08-30 23:59:59'
),
type_tbc_t as ( --临时表,获取去年同期(2018年9月type='REQ')同比数量为:2条SELECTCOUNT (TYPE) AS tbcFROMbiz_ticket TWHERE -- 同比时间T ."type" = 'REQ'AND T .create_time >= '2018-09-01 00:00:00'AND T .create_time <= '2018-09-30 23:59:59'
)
SELECT case when t2.tc>0 then round(CAST (t1.zbc * 100.0 / t2.tc AS NUMERIC),2) else 0 end as zb,
case when t3.hbc>0 then round(CAST (t1.zbc * 100.0 / t3.hbc AS NUMERIC),2) else 0 end as hb,
case when t4.tbc>0 then round(CAST (t1.zbc * 100.0 / t4.tbc AS NUMERIC),2) else 0 end as tb
FROM total_t t2, type_zbc_t t1, type_hbc_t t3,type_tbc_t t4;

结果展示:

5、重难点分析

5.1 WITH查询(公共表表达式)

WITH提供了一种方式来书写在一个大型查询中使用的辅助语句。这些语句通常被称为公共表表达式或CTE,它们可以被看成是定义只在一个查询中存在的临时表。在WITH子句中的每一个辅助语句可以是一个SELECTINSERTUPDATEDELETE,并且WITH子句本身也可以被附加到一个主语句,主语句也可以是SELECTINSERTUPDATEDELETE

WITHSELECT的基本价值是将复杂的查询分解称为简单的部分。

5.2 CASE WHEN...THEN...ELSE...EDN

详情请参考官方文档:http://www.postgres.cn/docs/10/functions-conditional.html#FUNCTIONS-CASE

CASE表达式是一种通用的条件表达式,类似于其它编程语言中的 if/else 语句:

CASE子句可以用于任何表达式可以出现的地方。每一个condition是一个返回boolean结果的表达式。如果结果为真,那么CASE表达式的结果就是符合条件的result,并且剩下的CASE表达式不会被处理。如果条件的结果不为真,那么以相同方式搜寻任何随后的WHEN子句。如果没有WHEN condition为真,那么CASE表达式的值就是在ELSE子句里的result。如果省略了ELSE子句而且没有条件为真,结果为空。

5.3 ROUND

5.4 CAST

CAST函数用于类型转换:

CAST(aa as NUMERIC)

CAST( bb as VARCHAR)

postgres使用with计算占比,同比和环比相关推荐

  1. 用分析服务SSAS解决占比、同比和环比问题

    本文将介绍用分析服务SSAS如何解决占比.同比和环比三个指标. 首先理解一下这三个指标的基本概念: 占比是指当前成员的值与该成员父级的值的比率,意思是在总数中所占的比重,比如某水果商店总销售额为14, ...

  2. 计算占比并保证百分比和为1

    计算占比并保证百分比和为1 常用场景 代码 常用场景 用于动态计算页面元素的百分比占比 可视化中扇形统计图的显示数值修正 代码 /*** 计算数组中各项的占比,保证百分比和等于1* @param ar ...

  3. Power BI中计算同比、环比

    财务需求中经常要求计算数据的同比.环比,下面介绍如何在Power BI 中创建用来计算同比和环比的度量值(SSAS模型中同理)... 现金表中有金额,时间(时间需要连续的年月日格式),计算同比.环比. ...

  4. 计算同比、环比的一些常识性问题

    什么鬼 我想在这篇文章中说明的是在计算同比.环比的值的时候,会遇到的一些问题.这些问题如下: 环比月天数不一致 同比周数不一致 可比&全同比 在这一小节里面,我先不说上面的四个问题,我想说的是 ...

  5. 用MDX进行同比及环比计算

    同比和环比计算是企业应用.电子商务应用中常用的计算方法,也是常用的数据分析手段.写这篇文章也是因为最近在学习MDX相关的一些计算方法的同时回想到原来我在项目中使用过的一些类似的,利用SQL来完成的统计 ...

  6. EasyExcel第三弹 + hutool-poi 配合使用导出较复杂Excel.xlsx + 计算增长率、同比环比、比重等

    一.回顾 继上次"动态表头easyExcel导入导出(https://blog.csdn.net/qq_37337660/article/details/114680512)", ...

  7. SQL技巧:使用AVG()函数计算占比

    计算方式对比 一般计算占比,比如转换率.留存率等,都是先分组求和再相除得到结果,但是在一定的条件下,可以直接使用AVG()求出百分比. 比如,要求统计报名转化率,报名转化率公式为转化率=报名人数/浏览 ...

  8. java 计算占比 百分比

    //2. 计算占比int num = Integer.parseInt(uintCardre.getUintPersonSum());int allNum = Integer.parseInt(uin ...

  9. 计算同比和环比的区别_【数据说第三期】同比和环比数据分析时,有哪些需要注意的点?...

    [写在前面] 上期探讨了数据分析与数据增长的核心逻辑,了解了数据分析和数据增长的逻辑和大体工作流程等.([数据说第二期]数据分析与数据增长核心逻辑杂谈)'' 本期先从数据分析的一环开始,针对" ...

  10. 同比 数据模型 环比_历史数据模型解决方案-历史数据模型解决方案

    方案介绍 针对上面介绍常规实现方案的弊端,本文从数据结构设计入手提出了"历史数据模型"解决方案.在物理表设计阶段针对这类报表问题进行特殊处理,物理表数据结构设计如下: 字段 描述 ...

最新文章

  1. 全球与中国节能冷却塔销售渠道分布及市场营销状况分析报告2022-2028年版
  2. hdu 1546(最短路)
  3. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十二║Vue实战:个人博客第一版(axios+router)...
  4. transition过渡的趣玩
  5. VBA中的字符串处理
  6. python 单例类
  7. C语言基础专题 - 数据类型与强制类型转换(编辑中)
  8. 物流广告收入实现高速增长 国际投行看好京东转型潜力
  9. mastercam9.1按alt键卡机,mastercam输入参数卡机需要win10输入法兼容性设置
  10. python中bool啥意思_python bool是什么意思
  11. bam文件读取_科学网—Pacbio Sequel两种bam文件解析 - 卢锐的博文
  12. vue3+vite+TS配置项目别名“@/“
  13. Flutter 项目的闪屏页方案
  14. python猜单词游戏实验原理_猜单词游戏课程设计报告
  15. tta 文件格式简述
  16. LINUX之静态库共享库
  17. [面试] lcy - 箴言
  18. codeforces24D
  19. 【C 语言】结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )
  20. Reids简直存储,key以“\xAC\xED\x00\x05t\x00“开头

热门文章

  1. 如何在IGV上使用BLAT搜索非模式物种
  2. Windows System32下常见快捷指令
  3. win系统设置定时开机
  4. 如何用opencv(C++)读入sar.tif图(复数矩阵)(radasat2)
  5. 什么是Microsoft 365?
  6. 一文看懂韦恩图和欧拉图的不同
  7. Python之NumPy(axis=0/1/2...)的透彻理解——通过np.sum(axis=?)实例进行说明
  8. 霸屏综艺,牵手明星,扩列神器皮皮APP的出圈始末
  9. 想自己做个网站,常用的自助建站哪个好呢?需要注意什么
  10. stm32增量式编码器使用流程