我有一个数据库有两个表-公司和报告。我想计算从第一季度到第二季度的变化。我尝试使用(下面的)子查询,但是主查询失败了。。。
FROM
(SELECT revenue FROM reports WHERE quarter = 'q2' AND fiscal_year = 2018) AS q,
(SELECT revenue FROM reports WHERE quarter = 'q1' AND fiscal_year = 2017) AS lq
下面是db fiddle,帮助您理解问题和模式:
https://www.db-fiddle.com/f/ee8snrojn45h7rc1rpcevn/4
当前简单查询。
SELECT
c.name, r.quarter, r.fiscal_year, r.revenue, r.taxes, r.employees
FROM
companies c
JOIN
reports r
ON
r.company_id = c.id
WHERE
c.is_marked = 1;
预期结果(这是我需要的):
+---------+----------+----------------+----------+--------------+-----------+------------------+
| Name | Revenue | Revenue_change | Taxes | Taxes_change | Employees | Employees_change |
+---------+----------+----------------+----------+--------------+-----------+------------------+
| ABC INC | 11056 | +54.77 | 35000.86 | -28.57% | 568 | -32 |
| XYZ INC | 5000 | null | null | null | 10 | +5 |
+---------+----------+----------------+----------+--------------+-----------+------------------+
我非常感谢您的帮助建立这个查询。提前谢谢。
6条答案
按热度按时间jgwigjjp1#
我让您了解我的方法,只使用一个join with group by子句和聚合函数。pecentajes计算的最后一步是使用第一种方法的派生表:
您可以在下一个链接中检查到最终查询的进度:
https://www.db-fiddle.com/f/2tuc1ggjusvnxsyghhgwc/3
泛化查询
我总结了前面关于不同财政年度季度比较方法的查询,如您在评论中所问,我将这样做:
您可以在下一个链接中查看一个示例:
https://www.db-fiddle.com/f/2tuc1ggjusvnxsyghhgwc/4
ss2ws0br2#
它给了我你所需要的输出。
输出:
谢谢!!!
7qhs6swi3#
使用mysql 8.0窗口函数:
db<>小提琴演示
z2acfund4#
使用纯sql很难得到结果。但我做到了。
执行以下sql。我希望你能得到这个sql的帮助。
结果如下
6l7fqoea5#
我试过了。我会这样做的。
所以我首先基本上选择了第二季度的所有报告。然后我以相同的公司id加入了第一季度。
在这一点上,您已经拥有了进行计算所需的所有信息。我曾经
COALESCE()
为了确保null值不会干扰计算,输出null而不是有效的数字。最后,我加入了
companies
表以获取名称。我对收入行进行了计算,并将它们输出为
difference
.希望有帮助!
13z8s7eq6#
如果您只需要比较两个四分之二,那么您可以用纯sql来完成。无需编程。
没有子查询,只需按季度两次将公司加入报表即可。
看到了吗https://www.db-fiddle.com/f/6hwbpofswaiqgbpfzwkxhi/0