sql - 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
我的解决方案显示不正确我会请求任何可以帮助我解决问题的人并让我知道我的错误在哪里
解决方案
一种选择使用条件聚合。这个想法是一次过滤两个季度的表,然后使用聚合函数中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
语法来声明文字日期 - 如果您的数据库不支持它,您可能需要调整它。
推荐阅读
- angular - RXJS 在新值可用时取消订阅
- reactjs - reactjs如何从子组件更新父组件的状态
- java - HttpURLConnection.getInputStream 返回 null
- c# - 使用不是 Web API 中的 id 的第二个参数路由到控制器
- node-red - 如何添加工作流触发器以指示 nodered 中已部署工作流的状态?
- java - 如何修改/删除作为 HashMap 中的元素的两个 ArrayList?
- react-native - 这里地图集成在 react-native 移动应用程序中
- c - 在编译时验证宏参数大小
- javascript - JavaScript React Redux:不先刷新就无法删除网页上的项目
- php - 本地主机上的 Automattic\WooCommerce 连接被拒绝