首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查找10月份销售最高的一天--有促销的商店

SQL查找10月份销售最高的一天--有促销的商店
EN

Stack Overflow用户
提问于 2019-11-25 09:11:34
回答 1查看 204关注 0票数 1

我是这里的SQL初学者,非常努力地应对这样的挑战:

有一整年的在线活动,我想知道:

  1. 在十月份的每一天,一共有多少家商店参与,总共产生了多少订单,总共产生了多少销售。
  2. 参加活动的商店的销售额最大的日期是什么,销售额是多少,所有商店的总销售量是多少(参与与否)。

我用的DMBS是Postgres。提前谢谢!

这是我的桌子:

表1- ele_slr_wide (所有存储ids)

代码语言:javascript
复制
shop_id  
A000001
A000002
A000003

表2- ele_slr_ord_wide_di (所有订单)

代码语言:javascript
复制
shop_id  order_id activity_id   pay_time   pay_amt
A000001  001       001         2019-10-25  100
A000001  002       002         2019-10-25  200
A000002  003       002         2019-10-27  200
A000003  004       NA          2019-10-25  100   

表3- ele_slr_act_wide (参与商店)

代码语言:javascript
复制
shop_id  activity_id   start_time  end_time
A000001  001           2019-9-25   2019-10-31
A000001  002           2019-10-5   2019-10-31
A000002  002           2019-10-5   2019-10-31

表4- ele_slr_ord_wide_di (参与商店订单)

代码语言:javascript
复制
shop_id  order_id activity_id   pay_time   pay_amt
A000001  001       001         2019-10-25  100
A000001  002       001         2019-10-25  200
A000002  003       002         2019-10-27  200

预期产出1:

代码语言:javascript
复制
Date      Participated_stores_count  total_orders   total_sales
2019-10-1           xxx                 xxx             xxx
...
2019-10-31          xxx                 xxx             xxx

预期产出2:

代码语言:javascript
复制
Date_max_sales   sales_participated_stores   total_sales
2019-10-15           300                      400
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 11:38:40

试着在下面

DB小提琴

查询1:

代码语言:javascript
复制
WITH numbers as
(
    SELECT date_trunc('day', dd):: date
    FROM generate_series( '2019-10-01'::timestamp , '2019-10-31'::timestamp, '1 day'::interval) dd
)
SELECT date_trunc,COUNT(DISTINCT E.shop_id) ParticipatedStores, COUNT(DISTINCT ES.order_id) TotalOrders, SUM(ES.pay_amt) total_sales
FROM numbers n LEFT JOIN ele_slr_act_wide E ON   date_trunc BETWEEN E.start_time AND E.end_time
LEFT JOIN ele_slr_ord_wide_di ES ON E.shop_id = ES.shop_id AND  date_trunc = ES.pay_time
GROUP BY  date_trunc;

查询2:

代码语言:javascript
复制
WITH numbers as
(
    SELECT date_trunc('day', dd):: date
    FROM generate_series( '2019-10-01'::timestamp , '2019-10-31'::timestamp, '1 day'::interval) dd
)
SELECT date_trunc,COUNT(DISTINCT E.shop_id) ParticipatedStores, COUNT(DISTINCT ES.order_id) TotalOrders, SUM(ES.pay_amt) total_sales
FROM numbers n LEFT JOIN ele_slr_act_wide E ON   date_trunc BETWEEN E.start_time AND E.end_time
LEFT JOIN ele_slr_ord_wide_di ES ON E.shop_id = ES.shop_id AND  date_trunc = ES.pay_time
GROUP BY  date_trunc
ORDER BY CASE WHEN SUM(ES.pay_amt) IS NULL THEN 0 ELSE SUM(ES.pay_amt) END DESC
limit 1;

输出将

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59028359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档