好久沒更新了,最近實在是太忙了,基本上天天和sql打交道。恰巧今天遇到了一個問題,在這里和大家分享一下,就是使用sql計算增長率的問題。
我的數(shù)據(jù)庫中的原始數(shù)據(jù)是這樣的:
year |
value |
2016 |
100 |
2017 |
200 |
2018 |
160 |
2019 |
180 |
2020 |
200 |
2021 |
240 |
但是我們前端需要展現(xiàn)的是一條折現(xiàn),顯示的是增長率,或者叫同比增長, 這個大家應該都知道吧,公式如下: (后一年數(shù)據(jù) – 前一年數(shù)據(jù)) / 前一年的數(shù)據(jù)。 這個一開始確實難住了我,后來在網(wǎng)上找到了解決方案,理解過后感覺甚是經(jīng)典,也分享給大家。
我們還是先來研究下公式吧, 我們假設今年的數(shù)據(jù)是 t1. 去年的數(shù)據(jù)是t2, 那么增長率為 (t1 – t2)/ t2 , 通過分解等價于 t1/t2 -1 ,這應該比較好理解吧。那么我們既然要用sql去實現(xiàn)他,當務之急,即使如何在我們的sql中獲取今年和去年的數(shù)據(jù),如果能夠獲得,我們我們就可以直接套用上面的公式即可。
我們怎么獲取相鄰兩個年份的數(shù)據(jù)呢,其實我們我們可以用兩張相同相同的表想關聯(lián),只不過讓他們的關聯(lián)條件不是我們常用的相等,而是進行錯位關聯(lián)。 說得比較抽象,我們直接看sql, 假設表名test ,年份字段year,值字段名value. sql如下:
select * from test t1 left join test t2 on t1.year = t2.year+1
我們通過一個left join關聯(lián)相同的表,要注意條件是: t1.year = t2.year+1 , 這就是我們所說的錯位關聯(lián)。當t1.year=2018年時, t2.year就是2017年,這樣t1和t2就代表了兩個相鄰年份的數(shù)據(jù),有了兩個相鄰年份,我們就可以計算增長率了。
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

這就是計算增長率的方式。怎么樣,你學會了么。

如若轉(zhuǎn)載,請注明出處:http://www.qjsdgw.cn/8359.html