我对mysql很新,但我有一个看起来像这样的表:
+----+------+-------+-------+------+
| id | year | month | total | cost |
+----+------+-------+-------+------+
| 1 | 2011 | Dec | 2000 | 2048 |
| 2 | 2012 | Jan | 2675 | 2738 |
| 3 | 2012 | Feb | 2685 | 2749 |
| 4 | 2012 | Mar | 1787 | 1830 |
| 5 | 2012 | Apr | 1547 | 1584 |
| 6 | 2012 | May | 847 | 867 |
| 7 | 2012 | Jun | 621 | 636 |
| 8 | 2012 | Jul | 610 | 624 |
| 9 | 2012 | Aug | 659 | 675 |
| 10 | 2012 | Sep | 828 | 848 |
| 11 | 2012 | Oct | 1420 | 1454 |
| 12 | 2012 | Nov | 1608 | 1646 |
| 13 | 2012 | Dec | 2721 | 2786 |
| 14 | 2013 | Jan | 2636 | 2699 |
| 15 | 2013 | Feb | 2266 | 2320 |
| 16 | 2013 | Mar | 2351 | 2407 |
| 17 | 2013 | Apr | 1497 | 1532 |
| 18 | 2013 | May | 819 | 838 |
| 19 | 2013 | Jun | 668 | 684 |
| 20 | 2013 | Jul | 580 | 594 |
| 21 | 2013 | Aug | 623 | 638 |
| 22 | 2013 | Sep | 790 | 808 |
| 23 | 2013 | Oct | 1146 | 1173 |
| 24 | 2013 | Nov | 1581 | 1618 |
+----+------+-------+-------+------+
我需要一个查询,它会给我结果(成本):
+-------+-------+------+
| month | 2012 | 2013 |
+-------+-------+------+
| Sep | 848 | 808 |
| Oct | 1454 | 1173 |
| Nov | 1646 | 1618 |
+-------+-------+------+
我正在关注电力消耗,需要查看今年和去年的月份。有什么想法吗?
答案 0 :(得分:1)
select month,
sum(case when year = 2012 then cost else 0 end) as 2012,
sum(case when year = 2013 then cost else 0 end) as 2013
from your_table
where month in ('Sep','Oct','Nov') and year in (2012,2013)
group by month
答案 1 :(得分:1)
虽然我没有编写过查询来生成您正在寻找的结果,但在对您的问题进行一些研究后,我发现了这里可能的解决方案:
http://forums.mysql.com/read.php?20,75357,75357#msg-75357
请参考有人在创建可能产生您需要的结果的视图中使用MAX()函数的回复。
由于这会为您创建一个视图,您不需要每次都重新运行查询,而只需查看视图的内容,甚至可以对视图运行查询!
以下是基于上述链接中提供的答案,我根据您的需求制定了该问题,请对此进行测试并将YOUR_TABLE_NAME
替换为您的表名。
CREATE VIEW monthly_info_view AS
SELECT month,
MAX( IF(year=2011,value,'') ) AS '2011',
MAX( IF(year=2012,value,'') ) AS '2012',
MAX( IF(year=2013,value,'') ) AS '2013'
FROM YOUR_TABLE_NAME
GROUP BY month
这不太好的原因是您每年都必须修改此视图以添加新年的相应列。