2010-05-17 153 views
0

我在MySQL中有一个包含以下字段的表:date,Value,Type。MySQL中两个系列的区别

类型可以是出口或进口。我想要一个查询来返回每个月的贸易赤字(出口 - 进口)。这可能与一个单一的查询?

+0

什么类型数据进入“价值”列? – gurun8 2010-05-17 00:51:20

回答

0

我不认为你可以在一个查询中做到这一点,因为你需要2个不同的WHERE子句。

可以检索与下面的查询出口:

SELECT SUM(VALUE) FROM table WHERE MONTH(date) = month AND YEAR(date) = year AND Type = 'exports' 

你可以用下面的查询检索进口:

SELECT SUM(VALUE) FROM table WHERE MONTH(date) = month AND YEAR(date) = year AND Type = 'imports' 

这是假定值是一个数字字段和日期是DATETIME或DATE字段。

对不起,在一行上的SQL,但我不知道如何在代码示例中换行。

1

您应该将日期存储为单独的列中的年/月/日,或者通过某种方式轻松链接到允许您执行的表格,否则您必须对每个date列执行缓慢的计算,以计算月。我会留下它,因为你现在已经知道了,但我会建议以不同的方式存储日期,以便使计算变得更加容易(如果你只按月分组,那么存储EXTRACT(YEAR_MONTH FROM date)结果的额外列会使它更快。总体

假设“价值”是某种形式的数字:

SELECT 
    EXTRACT(YEAR_MONTH FROM date) AS month, 
    SUM(
     CASE Type 
      WHEN 'export' THEN Value 
      ELSE -1 * Value 
     END 
    ) AS trade_deficit 
FROM 
    mytable 
GROUP BY 
    EXTRACT(YEAR_MONTH FROM date) 

(我没有测试过这一点,可能有一些语法mixups,但它应该工作)