我在一個表中對應於不同年份的兩個數字(如下所示)。如何在MySQL中進行算術運算
我怎樣寫一個SELECT
查詢來計算2014年和2013年
Table 1 sample information:
year value
--------------------
2013 100
2014 150
我在一個表中對應於不同年份的兩個數字(如下所示)。如何在MySQL中進行算術運算
我怎樣寫一個SELECT
查詢來計算2014年和2013年
Table 1 sample information:
year value
--------------------
2013 100
2014 150
我沒有一個SQL服務器方便試試這之間的值差,但我會用子查詢,這樣的:
SELECT (SELECT value FROM your_table WHERE year = 2014) -
(SELECT value FROM your_table WHERE year = 2013) AS Area
我所做的,根據你的建議,是這樣的: 選擇 (SELECT land_value /表面 \t從取樣 \t WHERE id_neighborhood = 22和表面IS NOT NULL和年份= 2014) - (SELECT land_value/surface \t FROM Sample \t WHERE id_neighborhood = 22 AND surface is NOT NULL AND year = 2013); 因此,我在MySQL Workbench中得到[this](http://i.stack.imgur.com/XM1TT.png)(抱歉,不同的字段名稱)。 這是正確的結果,但它附帶了SQL查詢,它以前從未發生過,所以我不明白爲什麼。 –
是的,SQL服務器報告輸出中的列名稱。在這種情況下,子查詢是列名稱。您可以使用AS別名。我將編輯答案來演示。 –
你說得對。我的不好,我忘了別名列名。 –
關鍵是要意識到你需要加入表本身,這樣你就行,它可以告訴你一些關於兩種不同的經營多年。例如:
SELECT t1.value-t2.value as difference
FROM yourtable AS t1
INNER JOIN yourtable AS t2
ON(t1.year=2013 AND t2.year=2014)
SELECT (a.value-b.value) as difference from table as a
INNER JOIN table as b
on a.year=2014 and b.year =2015
你應該瞭解關係數據庫的第一件事是,表中的任何記錄是語義上等同給了別人。我的意思是:你的桌子上可以有兩個記錄(2013和2014)......或者你可以有一百個記錄。所以,你應該考慮用表中記錄的一個不確定的數字來表示你的查詢。
例如:
的所有記錄的列表:
SELECT year, value FROM table
A記錄之間的連接
一步一步:即計算前一個任何記錄之間的差異查詢按年份:
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
基於胡安的回答,這裏是解決這個問題的
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
的更多的「企業」的方式一般的解決方案。假設表是這樣一個(命名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;
OUTPUT。
+--------------+-----------+-------------+----------+------------+
| current_year | last_year | current_val | last_val | difference |
+--------------+-----------+-------------+----------+------------+
| 2015 | 2014 | 100 | 120 | 20 |
| 2014 | 2013 | 120 | 500 | 380 |
| 2013 | 2012 | 500 | 400 | -100 |
+--------------+-----------+-------------+----------+------------+
如果它是一年並且它是一個數字,那麼它就可以工作。例如,如果他們是城市名稱和人口,而您想計算特定兩個城市之間的人口差異呢? –
@GustavoMoreno對於其他數據類型,這只是一個你想如何排序的問題,無論如何,「前一個」城市意味着什麼?很高興我的答案適合你。請接受答案。 –
你想'2013-100 = 1913',或'150-100 = 50'? –
自我加入2個別名 – Drew
@MarcB我需要做150-100 –