mysql - 获取数据(如果数据可用或不可用)

标签 mysql pdo

我被困在当前项目的某个地方。问题是我有一个名为“deal”的表 它有三个字段。

id |     date   |  deal_value|
------------------------------
 1 | 2014-01-03 |     200    |
 2 | 2014-01-03 |     40     |
 3 | 2014-02-20 |     23     |
 4 | 2014-03-21 |     440    |
 5 | 2014-06-18 |     256    |
 6 | 2014-06-03 |     55     |
 7 | 2014-12-15 |     456    |

现在的问题是我需要一个 sql 查询来获取结果,如下所示。

|  month  |  deal_value(count) |
--------------------------------
|   01    |    240             |
|   02    |    23              |
|   03    |    440             |
|   04    |    0               |
|   05    |    0               |
|   06    |    311             |
|   07    |    0               |
|   08    |    0               |
|   09    |    0               |
|   10    |    0               |
|   11    |    0               |
|   12    |    456             |

如果有人可以的话,请提出一些想法......

最佳答案

这是一种快速但肮脏的方法。

SELECT a.mnth, COALESCE(SUM(deal_value),0) FROM 
    (SELECT 1 mnth UNION SELECT 2 UNION SELECT 3 
     UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
     UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
     UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) a
LEFT OUTER JOIN deal
ON a.mnth=MONTH(`date`)
GROUP BY a.mnth

这不需要另一个表,使用SELECT .. UNION生成一个从1到12的列表,并LEFT OUTER JOIN原始数据。

演示:SQL Fiddle

关于mysql - 获取数据(如果数据可用或不可用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327048/

相关文章:

php - 使用 while 将查询结果放入数组

PHP PDO bindValue() 失败

php - 创建 PDO 对象时 php 中的意外等号

php - 通过php mysql搜索以二进制形式存储的IP地址

mysql - 从 information_schema 获取所有表,MySQL

mysql - SQL 语句中的 SQL 语句

php - 动态搜索 PHP MYSQL PDO

php - 我是否需要事务来获取序列中最后插入的正确 ID?

php - 使用带有 PDO 的 mysql_real_escape_string(没有连接到本地主机服务器)

Python KeyError 解析数据库结果