【问题标题】:MYSQL: JOIN Non-Exist data to a table and sum itMYSQL:将不存在的数据加入表并求和
【发布时间】:2016-10-05 03:25:48
【问题描述】:

我有这样的 sql:

SELECT 
m.MONTH
FROM (
           SELECT '1' AS MONTH
           UNION ALL SELECT '2' AS MONTH
           UNION ALL SELECT '3' AS MONTH
           UNION ALL SELECT '4' AS MONTH
           UNION ALL SELECT '5' AS MONTH
           UNION ALL SELECT '6' AS MONTH
           UNION ALL SELECT '7' AS MONTH
           UNION ALL SELECT '8' AS MONTH
           UNION ALL SELECT '9' AS MONTH
           UNION ALL SELECT '10' AS MONTH
           UNION ALL SELECT '11' AS MONTH
           UNION ALL SELECT '12' AS MONTH
) AS m

将显示第 1 个月到第 12 个月

我有一张这样的桌子: tableA:

YEAR | MONTH | A | B |
2015 |   1   | 1 | 3 |
2016 |   1   | 2 | 2 |
2013 |   1   | 3 | 2 |
2016 |   2   | 4 | 1 |
2016 |   3   | 5 | 1 |
2016 |   4   | 6 | 3 |

我试图从 1-12 选择整个月的 A 和 B 总和,即使 tableA 上的月份不存在以在 2016 年显示为 0。

结果:

预期结果如下:

MONTH | YEAR | SUM_OF_A | SUM_OF_B |
1     | 2016 |    6     |    3     |
2     | 2016 |    0     |    0     |
3     | 2016 |    5     |    1     |
4     | 2016 |    6     |    3     |
5     | 2016 |    0     |    0     |
6     | 2016 |    0     |    0     |
7     | 2016 |    0     |    0     |
8     | 2016 |    0     |    0     |
9     | 2016 |    0     |    0     |
10    | 2016 |    0     |    0     |
11    | 2016 |    0     |    0     |
12    | 2016 |    0     |    0     |

我尝试使用以下 SQL 将月份 SQL 与 tableA 连接,但结果不正确。

SELECT 
m.MONTH, tableA.YEAR, 
CASE WHEN tableA.A is not null THEN sum(tableA.A) ELSE 0 END AS SUM_OF_A,
CASE WHEN tableA.B is not null THEN sum(tableA.B) ELSE 0 END AS SUM_OF_B,
FROM (
           SELECT '1' AS MONTH
           UNION ALL SELECT '2' AS MONTH
           UNION ALL SELECT '3' AS MONTH
           UNION ALL SELECT '4' AS MONTH
           UNION ALL SELECT '5' AS MONTH
           UNION ALL SELECT '6' AS MONTH
           UNION ALL SELECT '7' AS MONTH
           UNION ALL SELECT '8' AS MONTH
           UNION ALL SELECT '9' AS MONTH
           UNION ALL SELECT '10' AS MONTH
           UNION ALL SELECT '11' AS MONTH
           UNION ALL SELECT '12' AS MONTH
) AS m
LEFT OUTER JOIN tableA on m.MONTH = tableA.MONTH
where tableA.YEAR=2016
group by tableA.MONTH

任何帮助都会很棒。

【问题讨论】:

    标签: mysql sql outer-join


    【解决方案1】:
    where tableA.YEAR=2016
    

    当您对任何列 tableA 设置条件时,只有 tableA.YEAR 不为 NULL 的行才会通过条件。因此,您从 OUTER JOIN 中消除了不匹配的行。

    将该条件放入您的 JOIN...ON 条件中。

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 2021-03-21
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多