2010-05-17 36 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,但它應該工作)