Mysql - 填充缺失月份的行

标签 mysql

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

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

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 的搜索结果通常连接两个或多个表来处理信息。解决此问题最快最好的解决方案是什么?

最佳答案

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

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

关于Mysql - 填充缺失月份的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880711/

相关文章:

php - 在 Laravel 中为不同客户模式创建关系数据库模型的最佳方法

sql - 从多个表中选择数据?

javascript - Uncaught ReferenceError : 'somevar' is not defined

MySQL 错误代码 : #1111 - Invalid use of group function

php - 将复选框值存储在数据库中,无论是否在 Codeigniter 中选中

mysql - 如何将我的插入物分成更小的部分?

mysql - 条件中的子查询 - 将 mysql 转换为具有相同表的 yii CActiveDataProvider

mysql - 查询生成器无法识别 whereIn

javascript - 如何在 javascript 或 MySQL 中对数据透视动态数组进行分组?

mysql - 如何计算 1 :n relationship in 1 query? 中两个表中的所有记录