婷婷综合国产,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
    欧美一区二区视频网站| 国产欧美一区二区精品性色| 日韩美女一区二区三区| 亚洲一区二区三区三| 国产v综合v亚洲欧| 国产日韩精品一区二区三区在线| 蜜桃传媒麻豆第一区在线观看| 欧美在线小视频| 亚洲第一激情av| 欧美日韩视频在线观看一区二区三区 | 麻豆专区一区二区三区四区五区| www.欧美精品一二区| 国产精品沙发午睡系列990531| 国产成人免费视频网站高清观看视频| 久久蜜桃一区二区| 精品在线观看视频| 国产精品久久久久一区二区三区| 91丨porny丨国产| 亚洲午夜在线电影| 91.xcao| a级精品国产片在线观看| 亚洲自拍偷拍网站| 日韩欧美在线不卡| 成人黄动漫网站免费app| 婷婷开心激情综合| www日韩大片| 欧美优质美女网站| 精品亚洲国产成人av制服丝袜| 亚洲视频你懂的| 久久综合色播五月| 色噜噜狠狠成人网p站| 老司机精品视频导航| 欧美情侣在线播放| 国产精品综合av一区二区国产馆| 亚洲最大成人综合| 亚洲视频在线一区| 久久九九99视频| 日韩欧美一区二区不卡| 欧美中文字幕一区二区三区亚洲| 国产精品一区在线| 国产精品资源站在线| 久久精品国产免费| 丝袜a∨在线一区二区三区不卡 | 亚洲视频在线一区观看| 日本一区二区成人在线| 国产精品全国免费观看高清| 精品毛片乱码1区2区3区| 欧美电视剧免费观看| 亚洲精品一区在线观看| 26uuu亚洲综合色| 国产校园另类小说区| 国产精品麻豆欧美日韩ww| 国产欧美日韩精品在线| 国产精品无遮挡| 夜夜嗨av一区二区三区中文字幕 | 91丨九色丨国产丨porny| 99国产精品久久| 欧美视频一区二区三区四区| 欧美另类高清zo欧美| 精品蜜桃在线看| 国产精品丝袜久久久久久app| 亚洲黄色小说网站| 免费在线一区观看| 成人精品小蝌蚪| 日韩一区二区影院| 亚洲欧洲国产专区| 日本三级韩国三级欧美三级| 日韩免费观看2025年上映的电影| 国产精品三级av| 久久久99免费| 日韩黄色小视频| 欧美特级限制片免费在线观看| 中文字幕免费不卡在线| 国产永久精品大片wwwapp | 日韩美女在线视频| 日韩和欧美的一区| 精品少妇一区二区三区日产乱码 | 欧美一区二区在线视频| 黑人巨大精品欧美黑白配亚洲| 久久网站最新地址| 成人免费视频视频在线观看免费 | 亚洲精品国产a| 欧美日韩一区三区| 黑人巨大精品欧美黑白配亚洲| 中文字幕欧美激情| 欧美日韩在线免费视频| 精品一区二区国语对白| 中文字幕一区二区三区乱码在线| 欧美三级一区二区| 国产大片一区二区| 亚洲一级二级在线| 2欧美一区二区三区在线观看视频| 99精品热视频| 久久99精品一区二区三区三区| 国产嫩草影院久久久久| 欧美天堂亚洲电影院在线播放| 久久精品国产秦先生| 日韩美女视频一区| 欧美成人精品高清在线播放| 99精品久久免费看蜜臀剧情介绍| 亚洲午夜精品在线| 国产性色一区二区| 欧美熟乱第一页| 国产91精品久久久久久久网曝门 | 欧美成人女星排行榜| 国产99精品视频| 香蕉加勒比综合久久| 久久婷婷国产综合精品青草| 色爱区综合激月婷婷| 国内精品不卡在线| 亚洲国产一区视频| 久久久久久久久久久电影| 欧洲一区二区av| 精品亚洲porn| 亚洲一区在线观看视频| 国产无一区二区| 精品日韩欧美一区二区| 色综合久久久久久久久| 国产一区二三区好的| 日韩 欧美一区二区三区| 亚洲女人****多毛耸耸8| 久久久高清一区二区三区| 91.xcao| 在线观看日韩毛片| 成人av集中营| 国产美女娇喘av呻吟久久| 日韩av一级片| 亚洲国产日韩一区二区| 亚洲图片欧美激情| 久久免费美女视频| 日韩精品一区二区三区视频播放 | 亚洲综合精品自拍| 色综合视频在线观看| 国产精品久久久久久妇女6080| 欧美大片一区二区| 日韩欧美亚洲另类制服综合在线 | 中文字幕在线观看一区二区| 久久麻豆一区二区| 欧美videos大乳护士334| 制服丝袜中文字幕一区| 欧美人妖巨大在线| 欧美日韩午夜在线| 欧美老人xxxx18| 欧美老女人在线| 91精品国产欧美一区二区18| 欧美精品在线观看播放| 69久久夜色精品国产69蝌蚪网| 欧美在线观看视频一区二区三区| 色综合久久六月婷婷中文字幕| 99精品久久只有精品| 91麻豆文化传媒在线观看| 欧美中文字幕一二三区视频| 欧美影院一区二区三区| 欧美人狂配大交3d怪物一区| 日韩视频一区二区| 欧美videofree性高清杂交| 欧美精品一区男女天堂| 国产视频一区在线观看| 久久精品视频免费| 亚洲色大成网站www久久九九| 亚洲欧美激情视频在线观看一区二区三区 | 日韩av高清在线观看| 日韩电影网1区2区| 激情伊人五月天久久综合| 成熟亚洲日本毛茸茸凸凹| 成人的网站免费观看| 91一区二区在线| 欧美丰满少妇xxxxx高潮对白 | 亚洲v中文字幕| 蜜臀国产一区二区三区在线播放| 日本在线不卡一区| 韩国午夜理伦三级不卡影院| 高清久久久久久| 色女孩综合影院| 欧美一区二区性放荡片| 2欧美一区二区三区在线观看视频| 国产日韩av一区二区| 亚洲乱码中文字幕综合| 三级在线观看一区二区| 国产一区二区三区精品视频| 色综合视频在线观看| 91精品一区二区三区久久久久久| 久久久五月婷婷| 亚洲国产一区二区视频| 日韩高清国产一区在线| 国模少妇一区二区三区| 92精品国产成人观看免费| 91 com成人网| 中文字幕在线观看一区| 蜜臀av亚洲一区中文字幕| 国产91综合网| 欧美丰满美乳xxx高潮www| 国产亚洲精品久| 亚洲一二三四久久| 国产成人在线色| 这里只有精品视频在线观看| 中文字幕一区av| 国产精品欧美经典| 日本aⅴ亚洲精品中文乱码| 成人h动漫精品一区二|