首页 > 解决方案 > Q) 编写查询以返回区域和相应的销售增长(比较 Q4-2019 与 Q3-2019 之间的增长)

问题描述

Q) 编写查询以返回区域和相应的销售增长(比较 2019 年第四季度与 2019 年第三季度之间的增长)。

给出的表格-

Cust_Sales: -Cust_id,product_sku,order_date,order_value,order_id,month
Cust_Territory: cust_id,territory_id,customer_city,customer_pincode

对于这个问题,使用表 FCT_CUSTOMER_SALES(每个客户的销售额)和 MAP_CUSTOMER_TERRITORY(提供区域到客户的映射)。

Output format-
TERRITORY_ID | SALES_GROWTH

我的解决方案-

Select ((q2.claims - q1.claims)/q1.claims * 100) AS SALES_GROWTH , c.territory_id

From

(select sum(s.order_value) from FCT_CUSTOMER_SALES s inner join MAP_CUSTOMER_TERRITORY c on s.customer_id=c.customer_id where s.order_datetime between 1/07/2019 and 30/09/2019 group by c.territory_id) as q1.claims,

(select sum(s.order_value) from FCT_CUSTOMER_SALES s inner join MAP_CUSTOMER_TERRITORY c on s.customer_id=c.customer_id where s.order_datetime between 1/10/2019 and 31/12/2019 group by c.territory_id) as q2.claims

Group by c.territory_id

我的解决方案显示不正确我会请求任何可以帮助我解决问题的人并让我知道我的错误在哪里

标签: sqlgroup-bysum

解决方案


一种选择使用条件聚合。这个想法是一次过滤两个季度的表,然后使用聚合函数中case的表达式sum()来计算每个季度的销售额:

select 
    c.territory_id,
    ( sum(case when s.order_date >= date '2020-01-01' then s.order_value end) 
        - sum(case when s.order_date < date '2020-01-01' then s.order_value end)
    ) / (sum(case when s.order_date < date '2020-01-01' then s.order_value end)) * 100.0 as sales_growth
from fct_customer_sales s 
inner join map_customer_territory c on s.customer_id = c.customer_id 
where s.order_datetime >= date '2020-01-07' and s.order_datetime < '2020-01-01'
group by c.territory_id

您没有告诉您正在使用哪个数据库,而日期功能高度依赖于供应商。这使用标准DATE语法来声明文字日期 - 如果您的数据库不支持它,您可能需要调整它。


推荐阅读