MySQL中两个系列的差异

MySQL中两个系列的差异,mysql,Mysql,我在MySQL中有一个包含以下字段的表:日期、值、类型 类型可以是导出或导入。我想要一个查询,返回每个月的贸易赤字(进出口)。通过一个查询就可以做到这一点吗?我认为不能在一个查询中做到这一点,因为需要两个不同的WHERE子句 您可以通过以下查询检索导出: SELECT SUM(VALUE) FROM table WHERE MONTH(date) = month AND YEAR(date) = year AND Type = 'exports' SELECT SUM(VALUE) FROM

我在MySQL中有一个包含以下字段的表:日期、值、类型


类型可以是导出或导入。我想要一个查询,返回每个月的贸易赤字(进出口)。通过一个查询就可以做到这一点吗?

我认为不能在一个查询中做到这一点,因为需要两个不同的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'
您可以通过以下查询检索导入:

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'
这假定值是数字字段,日期是日期时间或日期字段


很抱歉在一行上出现SQL,但我不知道如何在代码示例中换行。

您应该将日期存储为年/月/日,并在单独的列中存储,或者可以通过某种方式轻松链接到一个表中,这样做,否则您必须在每个
日期
列上进行缓慢的计算,以计算出月份。我会让它保持现在的状态,但我建议以不同的方式存储日期,以简化计算(如果您只按月份分组,那么额外的一列存储提取结果(从日期算起的年/月)将使计算速度更快

假设“值”是某种数字:

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)

(我还没有对此进行测试,可能会出现一些语法混乱,但它应该可以工作)

什么类型的数据进入值列?