当前位置: 首页 > 面试题库 >

如何按月分组,如果某个月没有值,则返回零?

慕容典
2023-03-14
问题内容

这是我的mysql收入表。

+----+------------------+---------------------------+------------+---------+
| id | title            | description               | date       | amount  |
+----+------------------+---------------------------+------------+---------+
|  1 | Vehicle sales up | From new sale up          | 2016-09-09 | 9999.99 |
|  2 | Jem 2 Sales      | From rathnapura store     | 2016-05-15 | 9545.25 |
|  3 | Jem 2 Sales 2    | From rathnapura store     | 2016-05-15 | 9545.25 |
|  4 | Jem 2 Sales 2    | From rathnapura store 234 | 2016-05-15 | 9545.25 |
+----+------------------+---------------------------+------------+---------+

字段“日期”是标准sql日期。我执行此查询的目的是按月计算收入总和,如果某个月没有收入,则返回零。如果某个月没有任何收入,我想要零,因为我想在图表中显示这些数据。

这是查询。

SELECT MONTHNAME(`date`) AS mName, MONTH(`date`) AS mOrder, ifnull(sum(amount),0) AS total_num FROM income GROUP BY mOrder ORDER BY mOrder DESC

但是我只会得到如下输出。如果其他月份没有值,则没有零。这是输出。

+-----------+--------+-----------+
| mName     | mOrder | total_num |
+-----------+--------+-----------+
| September |      9 |   9999.99 |
| May       |      5 |  28635.75 |
+-----------+--------+-----------+

我希望上表中的其他月份和total_num为零。我怎样才能做到这一点?那里也有同样的问题。但没有有效的答案。
按月分组,如果找不到数据,则返回0

请帮我解决这个问题。我用于此应用程序的语言是Node.JS :)


问题答案:

也许这不是最好的方法,但是它将解决您的问题。快速介绍:

SELECT 'January' AS mName, 1 AS mOrder, COALESCE(SUM(amount),0) AS total_num 
FROM income i
WHERE month(i.date) = 1

UNION

SELECT 'February' AS mName, 2 AS mOrder, COALESCE(SUM(amount),0) AS total_num 
FROM income i
WHERE month(i.date) = 2

UNION

...and go on


 类似资料:
  • 问题内容: 我正在尝试返回一些在滚动12个月内分散的结果,例如: 如何在日期范围内分散结果,并在第一列中填充月份名称? 在MSSQL中,它将类似于: 但这是针对Oracle数据库的,因此DATEPART和DateTime不可用。 我的问题表大致为: 问题答案: 使用: 您还可以使用:

  • 问题内容: 我有一个具有此架构的表 我正在尝试使查询工作显示每个月的总数。到目前为止,我已经尝试过DateDiff和嵌套选择,但都没有给我想要的东西。我认为这是最接近的: 但是当我应该获取值时,我只会得到空值。我想念什么吗? 问题答案: 您也可以尝试:

  • 问题内容: 我现在正在使用Microsoft SQL,我的代码是: 我希望当[avail]存在时,返回[avail]的值,如果不存在,则返回0或“未找到” 谢谢! 问题答案: 你可以用这个

  • 问题内容: 我有一个SQLite数据库,其中包含交易,每个交易都有一个 价格 和一个 transDate 。 我想检索按月分组的交易总和。检索到的记录应类似于以下内容: 问题答案: 当您按MONTH分组时总是很好,还应该检查YEAR 对于SQLITE

  • 问题内容: 我有一个非常基本的模型: 我可以使用以下命令创建按日期分组的所有条目的列表: 这自然会按天对项目进行分组。但是我真正想做的是按月分组。无论如何,我可以使用anateate()做到这一点吗? 非常感谢, 问题答案: 如果您使用的是PostgreSQL,则可能需要执行以下操作: 我不确定跨其他数据库的可移植性。

  • 无法计算年、月、日两个日期之间的差异。问题是每个月有30天,每年有365天,没有例外。这里有很多话题,但我没有找到任何能解决我的问题或帮助我解决问题的。我发现的每一个主题都只是用普通的方法解决计算差分的问题,这很简单。我如何计算这种差异? 我使用的是Java 7(没有机会安装joda time)和groovy 2.4.0。 例子有: 谢谢