我被困在当前项目的某个地方。问题是我有一张叫做“交易”的桌子。 它有三个字段。
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 |
如果有人可以,请提出一些想法...
答案 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