【问题标题】:Mysql - filling rows for missing monthsMysql - 填充缺失月份的行
【发布时间】:2014-08-18 07:45:04
【问题描述】:

天哪,它一定很简单,但我正在努力解决这个“填写缺失数据”的问题。

我有一个表,其中包含一些插入数据的以下列。

TABLE

year  month  payment
2014    3      100
2014    5      800
2014    9      200

我想从这张表中得到从 2014 年开始的完整月份的付款价值。

Month    Payment
  1        0
  2        0
  3       100
  4        0
  5       800

  ...

  12       0

我尝试在 select 中使用 IFNULL,但失败得很糟糕......并且来自 stackoverflow 的搜索结果通常会连接两个或多个表来操作信息。解决此问题的最快和最佳解决方案是什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    对于缺少的月份,您可以对所有月份进行联合查询并加入您的表

    SELECT 
    t1.`year`,
    t.`month`,
    coalesce(t1.payment,0) payment
    FROM
    (SELECT 1 AS `month`
    UNION 
    SELECT 2 AS `month`
    UNION 
    ....
    SELECT 12 AS `month`
    ) AS t
    LEFT JOIN your_table t1 on(t.`month` = t1.`month`)
    WHERE ....
    

    Fiddle Demo

    【讨论】:

    • 只是想知道......当表中有一些记录或没有记录时,它是否适用于 WHERE customer_id = 1(假设表有此列)?
    • 你是如何解决在哪里使用它的?在其他列上使用 where 对我不起作用。
    猜你喜欢
    • 2011-08-21
    • 2023-02-03
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2021-06-01
    • 2016-05-11
    相关资源
    最近更新 更多