您现在的位置是:网站首页> 编程资料编程资料

postgresql使用filter进行多维度聚合的解决方法_PostgreSQL_

2023-05-27 380人已围观

简介 postgresql使用filter进行多维度聚合的解决方法_PostgreSQL_

你有没有碰到过有这样一种场景,就是我们需要看一下某个时间段内各种维度的汇总,比如这样:最近三年我们卖了多少货?有多少订单?平均交易价格多少?每个店铺卖了多少?交易成功的订单有多少?交易失败的订单有多少? 等等...,假使这些数据的明细都在一个表内,该这么做呢? 有没有简单方式?还有如何减少全表扫描以更改的拿到数据?

如果只是简单的利用聚合拿到数据可能您需要写很多sql,具体表现为每一个问题写一段sql 相互之间join起来,这样也许是个好主意,不过对于未充分优化的数据库系统,针对每一块的问题求解可能就是一个巨大的表扫描,当然还有一个问题就是重复的where条件,所以能不能把相同的where条件抽取出来以简化sql呢?让我们思考一下,也许有这样的解决办法~ (结论是有,当然有,哈哈哈~)

首先我提供下基本的表结构及测试数据

基本表结构

 CREATE TABLE "order_info" ( "id" numeric(22) primary key , "oid" varchar(100) COLLATE "pg_catalog"."default", -- 订单号 "shop" varchar(100) COLLATE "pg_catalog"."default", -- 店铺 "date" date NOT NULL, --订单日期 "status" varchar(100) COLLATE "pg_catalog"."default", -- 订单状态 "payment" numeric(18,2), -- 交易支付金额 "product" varchar(100) COLLATE "pg_catalog"."default" -- 产品名称 );

初始化表数据

 INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217794', '16135476150276171', '店铺2', '2019-07-01', '交易失败', '139.00', '某某单品02'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217761', '16132502190562224', '店铺2', '2020-05-01', '交易成功', '9.90', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217795', '16122384743927326', '店铺3', '2019-06-01', '交易失败', '357.00', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217796', '16138945194036971', '店铺2', '2019-05-01', '交易中', '59.90', '某某单品'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217797', '16131909251901209', '店铺1', '2019-04-01', '交易失败', '359.00', '某某赠品'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217798', '16135391935074761', '店铺2', '2019-03-01', '交易失败', '139.00', '某某单品01'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217762', '16132472268456370', '店铺3', '2020-04-01', '交易成功', '79.00', '某某单品02'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217763', '16122960304700879', '店铺2', '2020-03-01', '交易成功', '357.00', '某某单品03'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217764', '16139491271154103', '店铺1', '2020-02-01', '交易成功', '139.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217765', '16122930818314343', '店铺2', '2020-01-01', '交易成功', '79.00', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217766', '12581133644786193', '店铺3', '2019-12-01', '交易成功', '79.00', '某某单品06'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217767', '16122904539659361', '店铺2', '2019-11-01', '交易成功', '359.00', '某某单品07'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217752', '16136227870425525', '店铺1', '2021-02-01', '交易成功', '4.90', '某某单品08'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217753', '16139781339192958', '店铺2', '2021-01-01', '交易失败', '89.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217754', '16136217317281545', '店铺3', '2020-12-01', '交易中', '6.90', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217756', '16123091065663616', '店铺1', '2020-10-01', '交易失败', '95.00', '某某单品01'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217757', '16123013684517817', '店铺2', '2020-09-01', '交易中', '79.00', '某某单品02'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217758', '16139678011781848', '店铺3', '2020-08-01', '交易中', '59.90', '某某单品03'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217759', '16139576187535157', '店铺2', '2020-07-01', '交易成功', '9.90', '某某单品04'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217791', '16132066938478413', '店铺4', '2019-10-01', '交易成功', '359.00', '某某单品05'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217792', '12589185047405699', '店铺5', '2019-09-01', '交易成功', '6.90', '某某单品06'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217760', '16139601047542860', '店铺1', '2020-06-01', '交易成功', '359.00', '某某单品07'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217837', '16138184483906283', '店铺4', '2021-03-04', '交易成功', '359.00', '某某单品02'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217838', '16134581997874325', '店铺5', '2021-03-04', '交易成功', '299.00', '某某单品03'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217839', '16131099658443817', '店铺3', '2021-03-04', '交易成功', '9.90', '某某单品04'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217840', '16131081649792689', '店铺2', '2021-03-04', '交易成功', '15.89', '某某单品05'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217841', '16131087729266410', '店铺1', '2021-03-04', '交易成功', '49.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217842', '16138126191679446', '店铺2', '2021-03-04', '交易成功', '6.90', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217843', '16138166422967430', '店铺3', '2021-03-04', '交易成功', '579.00', '某某单品'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217844', '16121412752067761', '店铺2', '2021-03-04', '交易成功', '359.00', '某某赠品'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217845', '12580980977280299', '店铺3', '2021-03-04', '交易成功', '359.00', '某某单品01'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217799', '16135358470437562', '店铺2', '2019-02-01', '交易成功', '339.00', '某某单品02'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217800', '16135320673129243', '店铺1', '2019-01-01', '交易成功', '299.00', '某某单品03'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217801', '16131874317933316', '店铺2', '2021-03-04', '交易失败', '359.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217802', '16131792695743424', '店铺3', '2021-03-04', '交易中', '79.00', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217803', '16122278134767414', '店铺2', '2021-03-04', '交易失败', '99.00', '某某单品06'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217804', '16131790093817033', '店铺3', '2021-03-04', '交易成功', '15.89', '某某单品03'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217805', '16135230297238674', '店铺2', '2021-03-04', '交易成功', '247.81', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217806', '16135220588746073', '店铺1', '2021-03-04', '交易成功', '25.79', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217831', '16131159355051065', '店铺3', '2021-03-04', '交易成功', '359.00', '某某单品07'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217832', '16131196017949185', '店铺2', '2021-03-04', '交易成功', '4.90', '某某单品08'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217833', '16131207902538323', '店铺1', '2021-03-04', '交易成功', '339.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217834', '12580998687179491', '店铺2', '2021-03-04', '交易成功', '15.89', '某某套装'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217835', '16138210374123403', '店铺3', '2021-03-04', '交易成功', '189.00', '某某单品11'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217836', '16138242030068870', '店铺2', '2021-03-04', '交易成功', '39.90', '某某单品01'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217846', '16134490408511254', '店铺3', '2021-03-04', '交易成功', '238.00', '某某单品07'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217847', '16134370276544509', '店铺2', '2021-03-04', '交易成功', '100.00', '某某单品08'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217854', '16121202131801564', '店铺1', '2021-03-04', '交易成功', '359.00', '某某礼盒'); INSERT INTO "order_info"("id", "oid", "shop", "date", "status", "payment", "product") VALUES ('051802588006217855', '16121178732153257', '店铺2', '2021-03-04', '交易成功', '499.00', '某某套装'); INSERT 
                
                

-六神源码网