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作为总数?