如何在MySQL中进行算术运算

时间:2015-10-15 18:13:15

标签: mysql sql

我在一张表中有两个不同年份的数字(如下所示)。

如何编写SELECT查询来计算2014年至2013年间的价值差异。

Table 1 sample information:

year           value
--------------------
2013            100
2014            150

7 个答案:

答案 0 :(得分:3)

诀窍是要意识到你需要将表加入到自身中,以便你可以在可以告诉你两年不同年份的行上进行操作。例如:

SELECT t1.value-t2.value as difference
FROM yourtable AS t1
INNER JOIN yourtable AS t2 
ON(t1.year=2013 AND t2.year=2014)

答案 1 :(得分:2)

SELECT (a.value-b.value) as difference from table as a 
INNER JOIN table as b
on a.year=2014 and b.year =2015

答案 2 :(得分:1)

您应该了解关系数据库的第一件事是表中的任何记录在语义上等同于其他记录。我的意思是:你的表中可能有两条记录(2013年和2014年)......或者你可能有一百条记录。因此,您应该根据带有不确定数量记录的表来考虑您的查询。

例如:一个计算任何记录与前一个记录之间差异的查询:

一步一步:

所有记录的列表:

SELECT year, value FROM table

年份记录之间的联接:

SELECT a.year, a.value, b.year, b.value 
FROM table AS a INNER JOIN table AS b ON a.year=b.year

前一年的记录之间的联接:

SELECT a.year, a.value, b.year, b.value 
FROM table AS a INNER JOIN table AS b ON a.year=1+b.year

最后,一年与上一次之间的差异:

SELECT a.year, a.value, b.year, b.value, a.value-b.value
FROM table AS a INNER JOIN table AS b ON a.year=1+b.year

答案 3 :(得分:1)

一般解决方案。假设像这样的表(以year_val为例):

mysql> select * from year_val;
+------+------+
| year | val  |
+------+------+
| 2015 |  100 |
| 2014 |  120 |
| 2013 |  500 |
| 2012 |  400 |
+------+------+
4 rows in set (0.01 sec)    

QUERY

SELECT yv1.year AS current_year
    ,yv2.year AS last_year
    ,yv1.val AS current_val
    ,yv2.val AS last_val
    ,yv2.val - yv1.val AS difference
FROM year_val yv1
INNER JOIN year_val yv2 
        ON yv1.year = yv2.year + 1;

<强>输出

+--------------+-----------+-------------+----------+------------+
| current_year | last_year | current_val | last_val | difference |
+--------------+-----------+-------------+----------+------------+
|         2015 |      2014 |         100 |      120 |         20 |
|         2014 |      2013 |         120 |      500 |        380 |
|         2013 |      2012 |         500 |      400 |       -100 |
+--------------+-----------+-------------+----------+------------+

答案 4 :(得分:0)

我没有一个SQL服务器可以尝试这个,但我会使用子查询,比如::

{{1}}

答案 5 :(得分:0)

不喜欢太多因为非常具体。但这是一种没有join使用条件SUM

的方法
SELECT SUM(CASE 
              WHEN year = 2014 THEN value
              ELSE -value
           END) as total
FROM Table1

答案 6 :(得分:0)

根据Juan的回答,这是解决这个问题的更“企业”方式

SELECT a.value - b.value as difference from (select year, value from table = 2014) as a 
INNER JOIN (select year, value from table where year = 2015) as b
on a.year = 2015 and b.year = 2014 
WHERE a.year = 2015 and b.year = 2014