mysql - 将两个表中的值按月求和

标签 mysql sql database

如何将两个表中的值按月求和?

我有两个表:

1)costs_1

-id
-total
-updated_at(timestamp)

2)costs_2

-id
-total_1
-updated_at_1(timestamp)

结果表需要有下一列:

-total
-total_1
-month

例如,如果我有一个表,我会执行下一个查询:

SELECT SUM(total), MONTH(updated_at), YEAR(updated_at) FROM product_sale GROUP BY MONTH(updated_at), YEAR(updated_at) ORDER by MONTH(updated_at)

最佳答案

我相信你想要这样的东西。

SELECT t1.y year,
       t1.m month,
       t1.total,
       t2.total
FROM
(
    SELECT YEAR(updated_at) y, 
           MONTH(updated_at) m, 
           SUM(total) total
    FROM costs_1
    GROUP BY YEAR(updated_at), MONTH(updated_at) 
) t1
JOIN
(
    SELECT YEAR(updated_at_1) y, 
           MONTH(updated_at_1) m, 
           SUM(total_1) total
    FROM costs_2
    GROUP BY YEAR(updated_at_1), MONTH(updated_at_1) 
) t2 ON t1.y = t2.y and t1.m = t2.m

但是,在此解决方案中,如果 costs_1costs_2 没有该月份的任何记录,您将错过该月份。如果你想要 FULL JOIN,你必须使用两个 OUTER JOINS 在 mysql 中模拟它,如下所示:

SELECT t1.y year,
       t1.m month,
       COALESCE(t1.total, 0),
       COALESCE(t2.total, 0)
FROM
(
    SELECT YEAR(updated_at) y, 
           MONTH(updated_at) m, 
           SUM(total) total
    FROM costs_1
    GROUP BY YEAR(updated_at), MONTH(updated_at) 
) t1
LEFT JOIN
(
    SELECT YEAR(updated_at_1) y, 
           MONTH(updated_at_1) m, 
           SUM(total_1) total
    FROM costs_2
    GROUP BY YEAR(updated_at_1), MONTH(updated_at_1) 
) t2 ON t1.y = t2.y and t1.m = t2.m

   UNION

SELECT t2.y year,
       t2.m month,
       COALESCE(t1.total, 0),
       COALESCE(t2.total, 0)
FROM
(
    SELECT YEAR(updated_at) y, 
           MONTH(updated_at) m, 
           SUM(total) total
    FROM costs_1
    GROUP BY YEAR(updated_at), MONTH(updated_at) 
) t1
RIGHT JOIN
(
    SELECT YEAR(updated_at_1) y, 
           MONTH(updated_at_1) m, 
           SUM(total_1) total
    FROM costs_2
    GROUP BY YEAR(updated_at_1), MONTH(updated_at_1) 
) t2 ON t1.y = t2.y and t1.m = t2.m

关于mysql - 将两个表中的值按月求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48221263/

相关文章:

php - 获取另一个 PHP 文件的内容并使用当前 PHP 文件的变量

mysql - SQL查询从所有ID等于的表中选择

mysql - 用 AM 或 PM 显示的时间戳

mysql - Web 开发 - SQL 创建最近的页面

javascript - 检查表中是否存在某个值 SQL

c# - Mailkit:获取消息并将它们复制到 MySQL,附件到驱动器

PHP/MySql 如何将 dateTime 从 STRING 转换为 DATE

mysql - 在groupby中使用groupby

c# - 替换引号是否足以防止 SQL 注入(inject)?

sql - 查询某行对应于另一个表中多行数据的内容的最佳方法