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

主頁 > 知識庫 > postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路

postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路

熱門標簽:移動外呼系統(tǒng)模擬題 電話機器人怎么換人工座席 濟南外呼網(wǎng)絡(luò)電話線路 地圖標注要花多少錢 400電話申請客服 天津開發(fā)區(qū)地圖標注app 江蘇400電話辦理官方 廣州電銷機器人公司招聘 電銷機器人能補救房產(chǎn)中介嗎

前言

節(jié)前公司業(yè)務(wù)方需要做一個統(tǒng)計報表,這個報表用于統(tǒng)計當月估計幾個明星品的銷售情況,而我們的數(shù)據(jù)是按行存儲的就是日期|產(chǎn)品|渠道|銷售額這樣,說是也奇了怪了,我們買的報(guan)表(yuan)系(la)統(tǒng)(ji) 竟然不能容易地實現(xiàn)。。。,于是我看了看,然后想了想,發(fā)現(xiàn)是可以通過sql算出這樣一個報表(多虧了postgresql的高階函數(shù)😂),然后直接將數(shù)據(jù)輸出到報表系統(tǒng) 完事兒~ ,以下 我將sql關(guān)鍵部分描述下,至於對前端展示有興趣的同學(xué)可留言,可考慮作一節(jié)講講哈😄~

報表

首先,業(yè)務(wù)需要的報表長這樣子的,看起來似乎還OK哈~

接下來我先給出我的測試腳本(均測試無bug)~

表結(jié)構(gòu)

drop table if EXISTS  report1 ;
CREATE TABLE "report1" (
  "id" numeric(22) NOT NULL,
  "date" date NOT NULL,
  "product" varchar(100),
  "channel" varchar(100),
  "amount" numeric(20,4)
);

表注釋

字段 描述
id 主鍵
date 日期
product 產(chǎn)品
channel 渠道
amount 銷售額

表數(shù)據(jù)

INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051726328010100000', '2021-05-04', '產(chǎn)品1', '京東', '8899.0000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051726328010100001', '2021-05-04', '產(chǎn)品2', '京東', '99.0000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100010', '2021-05-04', '產(chǎn)品1', '天貓', '230.0000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100011', '2021-05-04', '產(chǎn)品2', '天貓', '9.9000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100011', '2021-05-04', '產(chǎn)品3', '線下門店', '10.1000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100000', '2021-05-04', '產(chǎn)品1', '其它', '10');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100099', '2021-05-04', '產(chǎn)品2', '其它', '20000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100033', '2021-05-01', '產(chǎn)品1', '其它', '20000');
INSERT INTO "report1"("id", "date", "product", "channel", "amount") VALUES ('2105051727068010100044', '2021-05-01', '產(chǎn)品3', '線下門店', '12345');

思考

如果你看到這裏請稍稍思考下,一開篇我説過我們的數(shù)據(jù)是按 日期|產(chǎn)品|渠道|銷售額 這樣按行存儲的,以上截圖大家一看就懂,然後再看看開篇的報表截圖,我想大家可以同我一樣可以分析出以下幾點:

  • 報表縱向看大致分三部分

一部分是前一日產(chǎn)品銷售明細
然後一部分是前一日產(chǎn)品渠道產(chǎn)品合計
最後一部分是按渠道做的月統(tǒng)計

  • 報表橫向看大致分兩部分

一部分是前一日的數(shù)據(jù)
另一部分則是月份匯總數(shù)據(jù)

最後一部分則是所有渠道的產(chǎn)品合計、日合計、月合計

好了,問題來了,如何做呢,我是這麼想的:首先要很清楚的是你的sql大致分兩大部分(兩個子查詢)

一部分是前一日的數(shù)據(jù)另一部分則是月份匯總數(shù)據(jù)

最後需要將兩部分數(shù)據(jù)做聯(lián)表查詢,這樣太贊了,似乎完成了報表的80%,至於最後一行的求總,這裏先賣個關(guān)子哈~

第一部分數(shù)據(jù)(前一日的數(shù)據(jù))

我想我們立馬能做的第一部分sql恐怕就是行專列吧(似乎這是最容易實現(xiàn)的😄)

select
  channel,
  sum(case product when '產(chǎn)品1' then amount end) as c1,
  sum(case product when '產(chǎn)品2' then amount end) as c2,
  sum(case product when '產(chǎn)品3' then amount end) as c3
from report1
group by channel ;

sql似乎沒什麼問題,但是我們少了一列,對那就是按渠道日合計,當然如果您對postgresql窗口函數(shù)熟悉的話,這裏實現(xiàn)的方式估計你已經(jīng)猜到了(窗口over函數(shù)),上sql...

select
  channel,
  day_sum,
  sum(case product when '產(chǎn)品1' then amount end) as c1,
  sum(case product when '產(chǎn)品2' then amount end) as c2,
  sum(case product when '產(chǎn)品3' then amount end) as c3
from
  ( select *,sum(amount) over (partition by channel) as day_sum from report1  where date=to_date('2021-05-04','yyyy-MM-dd') ) as t1
group by t1.channel ,t1.day_sum;

哈哈,上圖的day_sum估計大家很熟悉了吧,哈哈哈~
看來已經(jīng)成功地完成了日數(shù)據(jù)部分,這裏可能的難點可能就兩點

  • 一是使用聚合函數(shù)(sum)+分組(group by)做行專列(當然postgresql也有其他很好用的行專列擴展,這裏就不介紹啦~)另一個是使用窗口函數(shù)(over)對明細提前做 按渠道的窗口匯總,這樣渠道日合計(行)的數(shù)據(jù)就有啦~

想想是不是很容易😂,接下來我們看看第二部分數(shù)據(jù)怎麼獲取~

第二部分數(shù)據(jù)(月份匯總數(shù)據(jù))

月份匯總的數(shù)據(jù)看似簡單的可怕,如果您熟練掌握postgresql中的日期處理的話估計分分鐘就能搞定,這裏就不耍大刀了,直接放出sql,哈哈哈😄

select 
  channel,sum(amount) as month_sum from report1 
where 
  date>=date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd'))) and date  date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd')) + '1 month') 
group by  
  channel

報表數(shù)據(jù)最終求解

現(xiàn)在,我們將求解的兩部分數(shù)據(jù)按渠道channel字段做inner join合并以上兩部分數(shù)據(jù),合并后的數(shù)據(jù)大致是這樣子的

這個是sql

select
    ttt.channel,
    sum(ttt.day_sum) as day_sum,
    sum(ttt.month_sum) as month_sum,
    sum(ttt.c1) as c1,
    sum(ttt.c2) as c2,
    sum(ttt.c3) as c3
from (
        select tt1.*,tt2.month_sum from
        (
        select
        channel,
      day_sum,
        sum(case product when '產(chǎn)品1' then amount end) as c1,
        sum(case product when '產(chǎn)品2' then amount end) as c2,
        sum(case product when '產(chǎn)品3' then amount end) as c3
        from
        ( select *,sum(amount) over (partition by channel) as day_sum from report1  where date=to_date('2021-05-04','yyyy-MM-dd') ) as t1
        group by t1.channel ,t1.day_sum
        ) as tt1 left join
        (
          select channel,sum(amount) as month_sum from report1 where date>=date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd'))) and date  date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd')) + '1 month') group by  channel
        ) as tt2 on tt1.channel = tt2.channel
    ) ttt
GROUP BY ttt.channel
order by channel asc

看,匯總的數(shù)據(jù)已經(jīng)有了,已經(jīng)可以算作是最終結(jié)果了(如果你需要報表系統(tǒng)來計算匯總行數(shù)據(jù)的話),當然 ,我們的報表系統(tǒng)過於繁瑣(不是不能做,而是太麻煩),需要你將做好的菜喂給它吃,這時,該怎麼辦呢。。。,哈哈哈 我們似乎忘記了很久不用的rollup函數(shù)(一開始我也沒發(fā)現(xiàn)有這麼個函數(shù)哈哈),試試看吧

select
    ttt.channel,
    sum(ttt.day_sum) as day_sum,
    sum(ttt.month_sum) as month_sum,
    sum(ttt.c1) as c1,
    sum(ttt.c2) as c2,
    sum(ttt.c3) as c3
    from (
        select tt1.*,tt2.month_sum from
        (
        select
        channel,
      day_sum,
        sum(case product when '產(chǎn)品1' then amount end) as c1,
        sum(case product when '產(chǎn)品2' then amount end) as c2,
        sum(case product when '產(chǎn)品3' then amount end) as c3
        from
        ( select *,sum(amount) over (partition by channel) as day_sum from report1  where date=to_date('2021-05-04','yyyy-MM-dd') ) as t1
        group by t1.channel ,t1.day_sum
        ) as tt1 left join
        (
          select channel,sum(amount) as month_sum from report1 where date>=date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd'))) and date  date(date_trunc('month',to_date('2021-05-04','yyyy-MM-dd')) + '1 month') group by  channel
        ) as tt2 on tt1.channel = tt2.channel
    ) ttt
    group by rollup(ttt.channel)
    order by channel asc

數(shù)是對的,意味著我們成功了~😂

總結(jié)

如果您肯下功夫?qū)W,postgresql世界有很多精彩的東西,當然也有一些東西對比mysql顯得繁瑣些,不過本著學(xué)習(xí)的心態(tài),我們縂能剋服這些,同時我們還是能做出超出我們自身能力範疇的東西的,哈哈,各位加油哦~

下章,我將講一講如何實現(xiàn)通過sql實現(xiàn)前端合并單元格的效果,是不是很神奇(我保證你全網(wǎng)搜不到), 希望不翻車,哈哈哈~

到此這篇關(guān)于postgresql高級應(yīng)用之行轉(zhuǎn)列匯總求和的實現(xiàn)思路的文章就介紹到這了,更多相關(guān)postgresql行轉(zhuǎn)列匯總求和內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PostgreSQL 實現(xiàn)列轉(zhuǎn)行問題
  • PostgreSQL 實現(xiàn)將多行合并轉(zhuǎn)為列
  • PostgreSQL實現(xiàn)交叉表(行列轉(zhuǎn)換)的5種方法示例

標簽:杭州 濮陽 榆林 海西 溫州 昭通 辛集 寶雞

巨人網(wǎng)絡(luò)通訊聲明:本文標題《postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路》,本文關(guān)鍵詞  postgresql,高級,應(yīng)用,之行,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路》相關(guān)的同類信息!
  • 本頁收集關(guān)于postgresql高級應(yīng)用之行轉(zhuǎn)列&匯總求和的實現(xiàn)思路的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美一区二区福利视频| jlzzjlzz亚洲日本少妇| 国产亚洲一区二区三区在线观看| 欧美午夜宅男影院| 欧美在线高清视频| 欧美日韩亚洲综合一区| 欧美日韩亚洲综合| 91精品国产色综合久久不卡蜜臀| 欧美三级在线看| 9191久久久久久久久久久| caoporen国产精品视频| 91网址在线看| 欧美成人a视频| 2014亚洲片线观看视频免费| 久久综合网色—综合色88| 欧美日韩国产系列| 久久精品人人爽人人爽| 26uuu欧美日本| 久久久美女毛片| 国产精品灌醉下药二区| 亚洲欧美日韩国产综合| 奇米一区二区三区av| 91浏览器在线视频| 日韩欧美专区在线| 亚洲一线二线三线视频| 日韩av中文字幕一区二区| 国内精品伊人久久久久av影院 | 欧美日本一区二区三区四区| 欧美卡1卡2卡| 日本一区二区三级电影在线观看| 中文字幕亚洲精品在线观看| 亚洲国产cao| 成人av影视在线观看| 欧美日韩美女一区二区| 成人免费视频在线观看| 琪琪久久久久日韩精品| 国产不卡视频一区二区三区| 7777精品久久久大香线蕉| 中文字幕av一区二区三区免费看| 免费看黄色91| 欧美日韩视频不卡| 午夜精品免费在线观看| 日韩亚洲欧美中文三级| 亚洲一线二线三线视频| 在线观看91av| 日本不卡一区二区三区| 精品国产污网站| 成人黄页在线观看| 一二三四社区欧美黄| 欧美精品123区| 老汉av免费一区二区三区| 久久亚洲一区二区三区明星换脸| 国产在线播精品第三| 国产日产欧美一区二区视频| av色综合久久天堂av综合| 视频一区二区中文字幕| 国产欧美日韩精品在线| 91在线观看美女| 免费成人在线观看| 亚洲国产另类精品专区| 欧美精品一区二区三区视频| 91猫先生在线| 成人黄页在线观看| 日日噜噜夜夜狠狠视频欧美人| 国产调教视频一区| 欧美日韩黄色影视| 不卡的电影网站| 狠狠色丁香久久婷婷综合丁香| 亚洲一区二区三区视频在线| 国产精品福利一区二区| 综合中文字幕亚洲| 亚洲免费观看在线观看| 欧美国产在线观看| 国产亚洲欧美色| 久久精品视频免费| 国产喷白浆一区二区三区| 久久亚洲私人国产精品va媚药| 日韩精品一区二区三区视频在线观看 | 久久狠狠亚洲综合| 日韩avvvv在线播放| 亚洲高清不卡在线观看| 亚洲福利电影网| 日韩激情av在线| 精品亚洲成av人在线观看| 黄一区二区三区| 成人av片在线观看| 91丝袜高跟美女视频| 在线观看一区不卡| 欧美色视频在线观看| 在线观看国产91| 日韩一区二区影院| 国产亚洲欧美在线| 亚洲精品国产精品乱码不99| 午夜国产不卡在线观看视频| 久久 天天综合| 欧美唯美清纯偷拍| 亚洲精品一区二区三区影院| 国产欧美一区二区精品婷婷| 亚洲乱码国产乱码精品精可以看| 亚洲成人免费av| 成人av免费在线播放| 91精品国产一区二区| ...xxx性欧美| 久久99精品视频| 欧美中文字幕一区二区三区亚洲| 精品国产一区二区三区久久影院 | 成人禁用看黄a在线| 欧美一区二区三区婷婷月色| 中文字幕在线一区| 国产在线国偷精品产拍免费yy| 91色乱码一区二区三区| 国产精品久久久久久妇女6080| 一区二区高清免费观看影视大全| 免费在线观看一区二区三区| 欧美在线观看18| 自拍偷拍欧美激情| 国产91精品精华液一区二区三区| 久久婷婷国产综合精品青草| 美女视频网站久久| 日韩一区二区免费在线电影| 亚洲成av人片观看| 日韩一区二区三区电影| 激情五月激情综合网| 欧美videossexotv100| 经典三级视频一区| 精品成人佐山爱一区二区| 久久99精品国产.久久久久久| 日韩美女天天操| 国产91在线观看| 国产精品久久777777| 不卡大黄网站免费看| 中文字幕一区二区三区在线播放| 色综合久久天天综合网| 亚洲成人久久影院| 久久久亚洲国产美女国产盗摄| 99久久精品国产一区| 天天综合日日夜夜精品| 精品国产乱子伦一区| 欧美性生活影院| 菠萝蜜视频在线观看一区| 亚洲伦理在线精品| 欧美不卡一二三| 在线看一区二区| 国产精品一区二区在线看| 亚洲男同1069视频| 欧美国产一区在线| 欧美高清www午色夜在线视频| av成人免费在线观看| 日韩av电影免费观看高清完整版| 国产精品国产三级国产a| 日韩三级视频在线观看| 色94色欧美sute亚洲13| 成人激情视频网站| 成人性生交大合| 久国产精品韩国三级视频| 天堂va蜜桃一区二区三区漫画版| 欧美一区二区三区在线视频| 久久久精品日韩欧美| 亚洲美女区一区| 欧美日韩久久久一区| 91麻豆视频网站| 91精品国产综合久久香蕉麻豆 | 日本美女一区二区| 国产一区二区三区电影在线观看| 婷婷开心久久网| 亚洲国产高清在线观看视频| 国产精品久久777777| 亚洲激情校园春色| 三级不卡在线观看| 国产福利电影一区二区三区| 国产美女精品在线| aaa国产一区| 欧美军同video69gay| 久久欧美中文字幕| 最新久久zyz资源站| 五月婷婷久久丁香| 丁香六月综合激情| 欧美色倩网站大全免费| 久久久久久**毛片大全| 中文字幕五月欧美| 美女免费视频一区| 成人激情视频网站| 91精品国产综合久久国产大片| 国产日韩一级二级三级| 一区二区三区鲁丝不卡| 免费观看在线综合色| a亚洲天堂av| 久久综合色综合88| 一区二区三区国产| 国产精品综合久久| 欧美日韩一区二区三区四区五区| 国产欧美精品一区二区色综合| 亚洲v日本v欧美v久久精品| 成人精品国产一区二区4080| 日韩一区二区高清| 亚洲人成精品久久久久久| 国产一区91精品张津瑜| 欧美男女性生活在线直播观看| 亚洲欧美中日韩| 国内精品视频一区二区三区八戒|