Mysql 从两个表中获取每年的总金额
我的数据库中有两个表,分别是Mysql 从两个表中获取每年的总金额,mysql,sql,database,Mysql,Sql,Database,我的数据库中有两个表,分别是销售和采购,我想在一次咨询中获得这两个表每年的总金额。表的结构大致如下所示: | sales | | purchases | |------------| |------------| | sales_id | | purch_id | | date | | date | | amount | | amount | | account | | account | 目前,我只有以下代码用于销售,
销售
和采购
,我想在一次咨询中获得这两个表每年的总金额。表的结构大致如下所示:
| sales | | purchases |
|------------| |------------|
| sales_id | | purch_id |
| date | | date |
| amount | | amount |
| account | | account |
目前,我只有以下代码用于销售,但我需要在一个查询中获得这两个表每年的总数
SELECT YEAR(date) as year, SUM(amount) AS year_total
FROM sales
GROUP BY YEAR(date)
您可以加入相关的子查询
select t1.year, ifnuLL(t1.year_total_sales,0), ifnull(t2.year_total_purchases,0)
from (
SELECT YEAR(date) as year, SUM(amount) AS year_total_sales
FROM sales
GROUP BY YEAR(date)
) t1
INNER JOIN (
SELECT YEAR(date) as year, SUM(amount) year_total_purchases
FROM purchases
GROUP BY YEAR(date)
) t2 on t1.year = t2.year
如果你在其中一张表中缺少了一些年份,你可以用uion上的左键来表示年份
select t3.year, t1.year_total_sales, t2.year_total_purchases
from (
select year(date) year
from sales
union
select year(date)
from purchases
) t3
left join (
SELECT YEAR(date) as year, SUM(amount) AS year_total_sales
FROM sales
GROUP BY YEAR(date)
) t1 ON t3.year = t1.year
LEFT JOIN (
SELECT YEAR(date) as year, SUM(amount) year_total_purchases
FROM purchases
GROUP BY YEAR(date)
) t2 on t3.year = t2.year
MySQL不支持
完全连接
。因此,我建议union all
/group by
:
select year(date), sum(sale_amount) as sales, sum(purchase_amount) as purchases
from ((select date, amount as sale_amount, 0 as purchase_amount
from sales
) union all
(select date, 0, amount
from purchases
)
) sp
group by year(date);
这将返回数据中所有年份的行,即使没有销售或购买。您是指两个总计的总和吗?不,只是每个表的总和谢谢您的回复,我只是尝试了一下,效果很好,但我意识到,我不会考虑这两个表中都没有的年份记录,例如:如果我有2020年的购买记录,而我在那一年仍然没有销售记录,他不会考虑这些记录。是否也存在此信息?如果两个表中的一个没有当年的记录,则显示0作为总数?