PostgreSQL踩坑小记录

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: PostgreSQL写同比

最近在接触到一个开源的BI工具进行可视化展示,拿到一张原始表,需要自己写SQL,然后通过可视化展示出来!刚好踩了一些坑!花了大半天的时间,做个Mark!1024节日快乐

看效果


Picture21.png


话原理

这次的原理,主要记录思路和踩坑!

前提理解,简化下我拿到的数据如下

部门

指标

月份

部门A

指标a

202001

部门B

指标a

202001

部门Z

指标a

202208

效果1 展示最近月的数据(可能是上月或上上月),这个思路就是找出最大的月份,然后,筛选月份等于最大的月份做Sum指标即可

效果2 展示最近年的数据,因为月份数据是例如YYYYMM,思路就是先找出最大的月份,然后提取YYYY作为最近年,然后,提取YYYY(月份)=最近年即可

效果3 对部门、年月做个分组,然后,提取YYYY(月份)=最近年

效果4 这个我折腾了老半天,因为这个数据源头是Postgresql有些语法和Mysql不一样【这里一开始不清楚就按照Mysql去处理,卡了】

1)对月份做拼接,拼接为例如20200101,

2)将对拼接好的月份从字符串转为日期格式

3)对转好的日期格式运算+一个月作为下个月日【这里也踩了坑,有个date_add是Mysql,在PostgreSql不好使】

4)拼接部门和下个月(作为表连接的主键)

5)两个表做连接

6)处理指标非空值

7)处理小数据点保留3位

8)(下月-本月)/本月,处理拼接指标*100,拼接%

9)处理日期月日,格式化为YYYYMM保持日期一致【这里也是format不好使,就简单的哦to_char就搞掂】

来实践


SELECT xx.department,xx.amount,To_char(xx.nextmonth,'YYYYmm'),yy.nextamount,yy.connect2,Concat(Round(Cast((yy.nextamount-xx.amount)/NULLIF(xx.amount, 0) AS NUMERIC),3)*100,'%') AS monthonmonthFROM (SELECT department,amount,nextmonth,thismonth,Concat(department,nextmonth) AS connect1FROM   (SELECT department,cc.amount,Cast(cc.nextmonth_time AS DATE)    nextmonth,cc.thismonth                    AS thismonthFROM   (SELECT department,amount,b.year_month_day_date + interval '1 MONTH' as nextmonth_time,b.year_month_day_date                      AS thismonthFROM   (SELECT department,amount,to_date(a.year_month_day,'yyyymmdd') AS year_month_day_dateFROM   (SELECT   department,sum(amount)                      AS amount,concat(year_month,'01') AS year_month_dayFROM     tableGROUP BY department,year_month_day ) AS a ) AS b ) AS cc ) AS ff ) AS xxLEFT JOIN(SELECT department,amount AS nextamount,thismonth,concat(department,thismonth) AS connect2FROM  (SELECT department,c.amount,thismonthFROM   (SELECT department,amount,b.year_month_day_date + interval '1 MONTH' AS nextmonth_time,b.year_month_day_date                      AS thismonthFROM   (SELECT department,amount,to_date(a.year_month_day,'yyyymmdd') AS year_month_day_dateFROM   (SELECT   department,sum(amount)                      AS amount,concat(year_month,'01') AS year_month_dayFROM     tableGROUP BY department,year_month_day ) AS a ) AS b )AS c ) AS gg ) AS yyON xx.connect1=yy.connect2



Picture22.png

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
关系型数据库 数据库 PostgreSQL
开发踩坑记录之三:PostgreSQL数据库表唯一性约束失效
在设计数据库表过程中,我们通常会对数据库表进行唯一性约束,以防止事务不一致导致的相同数据的重复插入问题。但是在实际开发中发现,即使设置了数据库表的唯一性约束,仍然出现了相同数据重复插入的问题。
|
关系型数据库 PostgreSQL
PostgreSQL 随机记录返回 - 300倍提速实践 (随机数组下标代替order by random())
标签 PostgreSQL , 数组 , 随机 , order by random() 背景 在业务系统中,有些场景会用到随机返回的功能,例如论坛,有很多帖子(比如有100万贴),有些是精华帖(比如有5万贴),为了让精华帖可以均衡的被访问,需要将5万贴随机的分页返回给用户。
1688 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL技术周刊第13期:PSQL新增变量记录SQL语句的执行情况和错误
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
2915 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 11 新特性解读 : psql 新增变量记录SQL语句的执行情况和错误
PostgreSQL 11 版本新增加 ERROR、SQLSTATE、ROW_COUNT、LAST_ERROR_MESSAGE、LAST_ERROR_SQLSTATE 五个变量用来记录SQL语句的执行结果状态和错误信息。
3789 0
|
关系型数据库 PostgreSQL 存储
|
SQL 关系型数据库 数据库
PostgreSQL并发删除插入同一条记录时的奇怪现象及分析
用sysbench 0.4.12对PostgreSQL进行压测时遇到了主键约束违反的错误。然后发现原因在于PostgreSQL在并发执行依次更新删除插入同一条记录的事务时(比如就像下面的事务),就可能会报主键约束违反的错误。
1962 0
下一篇
DataWorks