七叶笔记 » 数据库 » postgresql高级应用之合并单元格的思路详解

postgresql高级应用之合并单元格的思路详解

1.写在前面✍

继上一篇postgresql高级应用之行转列&汇总求和之后想更进一步做点儿复杂的(圖表暫且不論哈😂),当然作为報表,出現最多的無非就是合并單元格了,是的,我已經迫不及待啦😎~

2.思考

首先,我們的腦海中應該有一個對前端table有一個大致的了解, 當然這對非前端的同學十分的不友好,如果您嘗試閲讀以下内容存在困難的話(前端html、javascript) 可就此打住哈。。。 enn...,讓我先稍稍解釋下前端 html 的表格格式吧😀

2.1 前端html->table基本結構

先給出一個十分base的html demo.html

瀏覽器渲染出來(使用瀏覽器打開html文件)的樣子是這樣的~

以上總結就是colspan實現橫向合并單元格,rowspan實現縱向合并單元格~

呃嗯,既然我們知道了html需要這兩個屬性值(也就是合并的行數或合并的列數),那麽就是要在sql中生成這兩個參數值然後提供給前端的同學使用哈,這是淺層意思,那麽深層意思是什麽呢???容我想想看。。。

對於橫向合并單元格

需要使用 case+when+then 語句判斷是否需要橫向合并(重要的是要給出橫向合并的數值),這樣想是合理的,可能造成的困擾可能是這樣做會造成sql冗餘(當然也是不得已而爲之),當然本節就不再講橫向合并單元格啦

對於縱向合并單元格

step1.👉 如果使用聚合+窗口函數來計算需要合并的相同的列數,可能造成的問題是生成的rowspan對於相同列來説數值是一樣的(如下圖),這樣不可以欸~

step2.👉 。。。既然可以通過step1生成窗口内合并總數的數值,當然也可以通過窗口函數來生成一個倒排序列的列,哈哈😊,你似乎發現了什麽~~~,對,將窗口合并總數的列與窗口内倒排序的列做等值判斷,相等的不就是第一個合并數字列了。。。bingo 倒排序的窗口列

求總的列+倒排序的列

step3.👉 既然我們能做一個數據列的合并,也能做兩個列的合并(也可以是一個二級列,注意 order by 對合并行的影響哦),這裏簡單各一個經過層層包裝後的合并數值列生成,注意下圖的綠色部分哦😉

光説不練假把式,通過一下測試脚本試試囖😎~

2.2表结构

2.3表字段注释 字段 注释 id 主键 name 商品名称 price 价格 level2 二级分类 level1 一级分类

2.4表数据

3.🎉結果集最終求解

_紅色_部分即為前端童鞋需要的合并數值哈🥰~

如果你能看懂以上問題及求解的 sql ,恭喜你又升級啦😂

總結下::對問題的分析✨以及對問題求解的思考🤔很重要嘛,當然還包含對postgresql所提供工具的靈活使用 👉 總會產生意想不到的驚喜,哈哈😘~

到此这篇关于postgresql高级应用之合并单元格的思路详解的文章就介绍到这了,更多相关postgresql合并单元格内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!

相关文章