我的數(shù)據(jù)庫(kù)中的原始數(shù)據(jù)是這樣的:
year |
value |
2016 |
100 |
2017 |
200 |
2018 |
160 |
2019 |
180 |
2020 |
200 |
2021 |
240 |
但是我們前端需要展現(xiàn)的是一條折現(xiàn),顯示的是增長(zhǎng)率,或者叫同比增長(zhǎng), 這個(gè)大家應(yīng)該都知道吧,公式如下: (后一年數(shù)據(jù) – 前一年數(shù)據(jù)) / 前一年的數(shù)據(jù)。 這個(gè)一開(kāi)始確實(shí)難住了我,后來(lái)在網(wǎng)上找到了解決方案,理解過(guò)后感覺(jué)甚是經(jīng)典,也分享給大家。
我們還是先來(lái)研究下公式吧, 我們假設(shè)今年的數(shù)據(jù)是 t1. 去年的數(shù)據(jù)是t2, 那么增長(zhǎng)率為 (t1 – t2)/ t2 , 通過(guò)分解等價(jià)于 t1/t2 -1 ,這應(yīng)該比較好理解吧。那么我們既然要用sql去實(shí)現(xiàn)他,當(dāng)務(wù)之急,即使如何在我們的sql中獲取今年和去年的數(shù)據(jù),如果能夠獲得,我們我們就可以直接套用上面的公式即可。
我們?cè)趺传@取相鄰兩個(gè)年份的數(shù)據(jù)呢,其實(shí)我們我們可以用兩張相同相同的表想關(guān)聯(lián),只不過(guò)讓他們的關(guān)聯(lián)條件不是我們常用的相等,而是進(jìn)行錯(cuò)位關(guān)聯(lián)。 說(shuō)得比較抽象,我們直接看sql, 假設(shè)表名test ,年份字段year,值字段名value. sql如下:
select * from test t1 left join test t2 on t1.year = t2.year+1
我們通過(guò)一個(gè)left join關(guān)聯(lián)相同的表,要注意條件是: t1.year = t2.year+1 , 這就是我們所說(shuō)的錯(cuò)位關(guān)聯(lián)。當(dāng)t1.year=2018年時(shí), t2.year就是2017年,這樣t1和t2就代表了兩個(gè)相鄰年份的數(shù)據(jù),有了兩個(gè)相鄰年份,我們就可以計(jì)算增長(zhǎng)率了。
select t1.year, t1.value/t2.value-1 rate from
test t1 left join test t2 on t1.year = t2.year +1
order by t1.year
這就是計(jì)算增長(zhǎng)率的方式。怎么樣,你學(xué)會(huì)了么。
]]>