婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > postgresql高級應用之合并單元格的思路詳解

postgresql高級應用之合并單元格的思路詳解

熱門標簽:孝感銷售電銷機器人廠家 奧維地圖標注字體大小修改 北京智能外呼系統供應商家 中國地圖標注省份用什么符號 江西穩定外呼系統供應商 高德地圖標注電話怎么沒了 無錫梁溪公司怎樣申請400電話 電話機器人錄音師薪資 智能電銷機器人教育

1.寫在前面✍

繼上一篇postgresql高級應用之行轉列匯總求和之后想更進一步做點兒復雜的(圖表暫且不論哈😂),當然作為報表,出現最多的無非就是合并單元格了,是的,我已經迫不及待啦😎~

2.思考

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

2.1 前端html->table基本結構

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

!DOCTYPE html>
html>
head>
	meta charset="utf-8" />
	title>demo/title>
/head>
body>
  !-- 這裏定義了兩個屬性 border:定義表格邊框 cellpadding:定義單元格大小 -->
  table border="3"  cellpadding="8">
	thead>
		tr>
			th>表頭1/th>th>表頭2/th>th>表頭3/th>
		/tr>
	/thead>
	tbody>
		tr>
			td>第一行第1個/td>td>第一行第2個/td>td>第一行第3個/td>
		/tr>
		tr>
			!-- 使用colspan屬性進行橫向合并,橫向被合并的單元格位置需要騰出來 -->
			!-- 以下橫向合并兩個單元格,所以第二個td標簽就不要寫了,否則會溢出哦~ -->
			td colspan="2">橫向合并了兩個單元格/td>td>第二行第3個/td>
		/tr>
		tr>
			td>第三行第1個/td>td>第三行第2個/td>td>第三行第3個/td>
		/tr>
		tr>
			!-- 使用rowspan屬性進行縱向合并,縱向合并的(跨越的)單元格位置需要騰出來 -->
			!-- 以下縱向合并三個個單元格(在本行最後一個標簽),所以下兩行的最後兩個td標簽就不要寫啦~,否則同樣會溢出哦~ -->
			td>第四行第1個/td>td>第四行第2個/td>td rowspan="3">縱向合并了三個單元格/td>
		/tr>
		tr>
			td>第五行第1個/td>td>第五行第2個/td>
		/tr>
		tr>
			td>第六行第1個/td>td>第六行第2個/td>
		/tr>
	/tbody>
  /table>
/body>
/html>

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

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

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

  • 對於橫向合并單元格

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

  • 對於縱向合并單元格

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

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

求總的列+倒排序的列

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

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

2.2表結構

drop table if EXISTS  report2 ;
CREATE TABLE report2 (
  "id" varchar(10) primary key,
  "name" varchar(50),
  "price" numeric,
  "level2" varchar(50) ,
  "level1" varchar(50)
);

2.3表字段注釋

字段 注釋
id 主鍵
name 商品名稱
price 價格
level2 二級分類
level1 一級分類

2.4表數據

INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0015', '洗發露', '36', '洗護', '日用品');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0008', '香皂', '17.5', '洗護', '日用品');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0007', '薯條', '7.5', '垃圾食品', '零食');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0009', '方便面', '3.5', '垃圾食品', '零食');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0004', '辣條', '5.6', '垃圾食品', '零食');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0006', 'iPhone X', '9600', '小電器', '電器');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0003', '手表', '1237.55', '小電器', '電器');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0012', '電視', '3299', '大電器', '電器');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0016', '洗衣機', '4999', '大電器', '電器');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0013', '圍巾', '93', '配飾', '服裝配飾');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0017', '特步涼鞋', '499', '鞋子', '服裝配飾');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0001', 'NIKE新款鞋', '900', '鞋子', '服裝配飾');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0002', '外套', '110.9', '上衣', '服裝配飾');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0014', '作業本', '1', '紙張', '文具');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0005', '鉛筆', '7', '筆', '文具');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0010', '水杯', '27', '餐飲', '日用品');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0011', '毛巾', '15', '洗護', '日用品');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0018', '繪圖筆', '15', '筆', '文具');
INSERT INTO "report2"("id", "name", "price", "level2", "level1") VALUES ('0019', '汽水', '3.5', '其它', '零食');

3.🎉結果集最終求解

select 
  t1.*,
  case when  t_rank=t_count then t_count else null end as level1_row,
  case when  tu_rank=tu_count then tu_count else null end as level2_row
from 
(
    select 
      *,
      row_number() over(PARTITION by level1 order by level1 asc) t_rank,
      count(1) over (partition by level1) t_count,
      row_number() over(PARTITION by level1,level2 order by level1,level2 asc) tu_rank,
      count(1) over (partition by level1,level2) tu_count
    from report2 order by level1
) t1 order by t1.level1,t_rank desc,t_count desc,tu_rank desc,tu_count desc;

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

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

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

到此這篇關于postgresql高級應用之合并單元格的思路詳解的文章就介紹到這了,更多相關postgresql合并單元格內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • postgresql高級應用之合并單元格的思路詳解
  • postgresql數據合并,多條數據合并成1條的操作
  • PostgreSQL 字符串拆分與合并案例
  • postgresql合并string_agg函數的實例
  • PostgreSQL 實現將多行合并轉為列
  • postgresql 實現sql多行語句合并一行
  • PostgreSQL實現批量插入、更新與合并操作的方法

標簽:泰州 荊州 齊齊哈爾 海北 那曲 阜陽 通化 臨滄

巨人網絡通訊聲明:本文標題《postgresql高級應用之合并單元格的思路詳解》,本文關鍵詞  postgresql,高級,應,用之,合并,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgresql高級應用之合并單元格的思路詳解》相關的同類信息!
  • 本頁收集關于postgresql高級應用之合并單元格的思路詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩中文字幕一区二区三区| 免费的国产精品| 亚洲国产精品久久不卡毛片| 不卡视频在线观看| 久久九九影视网| 日本va欧美va欧美va精品| 欧美精品一二三四| 青娱乐精品视频| 日韩一区二区三免费高清| 免费成人深夜小野草| 欧美电视剧免费全集观看| 国产福利91精品| 亚洲欧美一区二区不卡| 欧美日韩国产成人在线免费| 久久精品国产亚洲a| 日本一区二区三区高清不卡| 91麻豆精品秘密| 日韩精品一级中文字幕精品视频免费观看| 日韩精品中文字幕一区二区三区| 国产精品小仙女| 亚洲欧洲一区二区三区| 欧美剧情片在线观看| 国产精品综合久久| 亚洲一区二区三区中文字幕 | 欧美a级一区二区| 久久综合国产精品| 91丨porny丨国产| 麻豆国产欧美日韩综合精品二区| 国产欧美精品一区| 91精品国产高清一区二区三区 | www.综合网.com| 午夜精品福利视频网站| 国产亚洲1区2区3区| 欧美日韩在线精品一区二区三区激情| 奇米888四色在线精品| 亚洲色图欧美在线| 久久综合五月天婷婷伊人| 在线精品视频一区二区三四| 国产麻豆精品95视频| 日韩主播视频在线| 一区二区在线观看免费| 久久久精品国产免大香伊| 欧美三级中文字幕| 91在线观看地址| 男男成人高潮片免费网站| 亚洲三级在线观看| 国产欧美日韩不卡| 欧美一卡二卡在线| 欧美三级电影在线看| 成年人午夜久久久| 国产xxx精品视频大全| 另类欧美日韩国产在线| 亚洲国产精品久久久男人的天堂| 亚洲欧洲另类国产综合| 久久综合狠狠综合| 亚洲精品一线二线三线无人区| 在线成人av影院| 欧美美女视频在线观看| 欧美性猛交xxxxxxxx| 一本久道中文字幕精品亚洲嫩| av在线不卡免费看| 波多野结衣视频一区| 成人一级片网址| 国产不卡视频在线播放| 国产凹凸在线观看一区二区| 国产成人午夜精品5599| 国产精华液一区二区三区| 国产精品1区2区3区| 国产不卡视频在线观看| 成人av中文字幕| 99re6这里只有精品视频在线观看| 成人免费毛片片v| 波多野结衣在线aⅴ中文字幕不卡| 成人精品视频一区二区三区尤物| 国产福利视频一区二区三区| 盗摄精品av一区二区三区| voyeur盗摄精品| 色婷婷av一区| 欧美一区二区三区免费大片| 精品久久人人做人人爱| 久久精品人人爽人人爽| 国产精品网友自拍| 亚洲激情六月丁香| 日韩中文字幕91| 国产在线不卡一区| 成人av在线影院| 欧美日韩在线不卡| 精品国产91久久久久久久妲己| 国产欧美一区二区精品性色超碰| 国产精品欧美久久久久无广告| 一区二区欧美国产| 裸体一区二区三区| av男人天堂一区| 欧美一区二区视频网站| 久久久精品免费观看| 亚洲一区二区三区中文字幕| 老司机精品视频导航| 91蜜桃在线观看| 日韩欧美国产一区二区在线播放| 国产精品丝袜91| 秋霞国产午夜精品免费视频| 高清在线不卡av| 欧美日本一区二区三区四区| 久久久www免费人成精品| 一区二区三区蜜桃网| 国产在线不卡一区| 欧美日韩国产综合一区二区三区| 国产无人区一区二区三区| 午夜视频在线观看一区二区三区| 国产成人综合亚洲网站| 欧美一区二区福利在线| 亚洲三级久久久| 极品美女销魂一区二区三区免费| 色天使色偷偷av一区二区| 精品va天堂亚洲国产| 午夜精品123| 91欧美激情一区二区三区成人| 精品黑人一区二区三区久久| 综合欧美一区二区三区| 国产精品小仙女| 欧美成人aa大片| 丝袜诱惑亚洲看片| 91成人在线精品| 亚洲人成在线播放网站岛国| 国产精品1区二区.| 欧美videos大乳护士334| 午夜精品久久久久久| 欧美亚男人的天堂| 一级特黄大欧美久久久| 色婷婷久久综合| 日韩理论片一区二区| 成人黄色综合网站| 国产午夜亚洲精品不卡| 国产美女av一区二区三区| 日韩精品一区二区三区四区| 亚洲成人免费av| 欧美在线视频全部完| 一区二区三区精密机械公司| 99久久777色| 国产精品久久久久久久久图文区| 激情成人午夜视频| 国产亚洲精品aa午夜观看| 国产精品一区二区三区四区| 欧美不卡一区二区| 国产伦精一区二区三区| 国产日韩在线不卡| 成人av在线资源网| 一区二区三区电影在线播| 欧美在线你懂的| 日韩av电影免费观看高清完整版在线观看| 在线精品视频一区二区三四| 亚洲国产视频一区| 91精品国产高清一区二区三区| 日韩精品免费专区| 日韩精品在线一区二区| 国产一区不卡在线| 国产精品国产成人国产三级| 日本高清不卡aⅴ免费网站| 午夜视频在线观看一区二区三区| 欧美艳星brazzers| 欧美bbbbb| 国产精品丝袜一区| 欧美精品粉嫩高潮一区二区| 国产一区二区三区四区在线观看| 国产精品久久久久9999吃药| 欧美视频一区二区三区四区| 激情五月婷婷综合| 中文字幕中文在线不卡住| 欧美亚洲丝袜传媒另类| 久久精品国产亚洲一区二区三区| 国产精品污网站| 欧美日韩激情一区二区| 国产风韵犹存在线视精品| 亚洲精品国产成人久久av盗摄| 精品视频一区二区三区免费| 极品少妇xxxx精品少妇偷拍| 亚洲精品视频观看| 精品国产免费人成电影在线观看四季| 91麻豆免费观看| 国产一区二区三区综合| 亚洲一区二区视频在线观看| 日本一区二区免费在线观看视频| 欧美日韩精品专区| 97超碰欧美中文字幕| 国内精品在线播放| 午夜精品久久久久久久久| 国产欧美日韩综合| 日韩欧美你懂的| 色8久久人人97超碰香蕉987| 国产精品综合一区二区| 日本午夜一区二区| 亚洲综合一二区| 亚洲国产高清不卡| 亚洲精品一区二区三区蜜桃下载| 色婷婷av一区二区三区软件 | 中文久久乱码一区二区| 欧美一区二区三区在线观看 | 26uuu精品一区二区| 欧美日韩你懂得| 91在线无精精品入口|