sql - 使用 SQL 获取当前季度的季度环比增长
问题描述
我试图从数据集中仅获取当前季度的季度收入增长。我目前有一个看起来像这样的查询
Select
x.Year,
x.quarter,
x.product,
x.company_id,
y.company,
SUM(x.revenue)
FROM
company_directory y
LEFT JOIN (
SELECT
DATEPART(YEAR, @date) year,
DATEPART(QUARTER, @date) quarter,
product,
SUM(revenue)
FROM sales
WHERE year => 2018 ) x
ON y.company_id = x.company_id
我得到的数据是这种格式
Year Quarter Product company_id company revenue
2020 Q2 Banana 1092 companyX $100
如果报告当前季度,我想要做的是获得季度收入增长。例如,在上面的数据中,因为我们处于 2020 年第二季度,我想要一个额外的列来说明 QoQ 是 x%,它将比较 Q2 和 Q1 的收入。如果该行报告 Q1-2020 或 Q2-2019 QoQ 将为空,因为这些都不是基于今天日期的当前季度。
预期结果
Year Quarter Product company_id company revenue QoQ
2020 Q2 Banana 1092 companyX $100 20%
2020 Q1 Pear 1002 companyX $23 NULL
我不完全确定该怎么做,没有太多的运气搜索。知道如何实施吗?
解决方案
您可以使用窗口函数。
select
s.yr,
s.qt,
s.product,
s.company_id,
cd.company,
s.revenue,
1.0 * (
s.revenue
- lag(s.revenue) over(partition by s.product, s.company_id order by s.yr, s.qt)
) / lag(s.revenue) over(partition by s.product, s.company_id order by s.yr, s.qt) as QoQ
from company_directory cd
inner join (
select
datepart(year, sales_date) yr,
datepart(quarter, sales_date) qt,
product,
company_id,
sum(revenue) revenue
from sales
where sales_date >= '2018-01-01'
group by
datepart(year, sales_date) year,
datepart(quarter, sales_date) quarter,
product,
company_id
) s on s.company_id = cd.company_id
笔记:
您的代码不是有效的 MySQL;我假设您正在运行 SQL Server 而不是 MySQL
在子查询中使用变量没有意义 - 我假设您在表中有一个名为的列
sales_date
,sales
其中包含销售日期您的
group by
条款与您的select
条款不一致-我假设您希望每个公司和每个产品的季度销售增长您可能需要将
QoQ
计算调整为您对季度增长的实际定义我看不出 a 的意义
left join
,所以我inner join
改用
推荐阅读
- linux - 使用 cmake 编译后,执行时找不到库
- sql - 选择相互关联的用户并按组对它们进行聚类
- rust - 如何将类型存储在数组中?
- excel - PowerShell - 将多个 CSV 文件导入多个工作表中的 Excel 文件
- c# - 为什么单击客户端时我的 DatePicker (BunifuUI) 不显示?
- .net - 如何使用 Graph API 获取仅在全局地址列表中可见的电子邮件组列表?
- google-sheets - 如何更改坐标的颜色?
- flutter - Flutter textformfield 底部有 2 行
- android - 在我的 react native expo 应用程序中,我可以在哪里找到或设置 Firebase 的 applicationID?
- sql - Sql 语句获取每月未下订单的客户(同时显示月份)