如果数据可用,则获取数据

时间:2014-06-20 12:15:18

标签: mysql pdo

我被困在当前项目的某个地方。问题是我有一张叫做“交易”的桌子。 它有三个字段。

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             |

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这很好......

SELECT  distinct DATE_FORMAT(a.date, '%Y-%m') as date,
        (select sum(deal_value) from deal as a1 where DATE_FORMAT(a1.date, '%Y-%m')=DATE_FORMAT(a.date, '%Y-%m') ) as sum
FROM `deal` as a