好久没更新了,最近实在是太忙了,基本上天天和sql打交道。恰巧今天遇到了一个问题,在这里和大家分享一下,就是使用sql计算增长率的问题。
我数据库中的原始数据是这样的:
year | value |
---|---|
2016 | 200 |
2017 | 160 |
2018 | 230 |
2019 | 100 |
2020 | 250 |
但是我们前端需要展现的是一条折现,显示的是增长率,或者叫同比增长, 这个大家应该都知道吧,公式如下: (后一年数据 - 前一年数据) / 前一年的数据。 这个一开始确实难住了我,后来在网上找到了解决方案,理解过后感觉甚是经典,也分享给大家。
我们还是先来研究下公式, 我们假设今年的数据是 t1. 去年的数据是t2, 那么增长率为 (t1 - t2)/ t2 , 通过分解等价于 t1/t2 -1 ,这应该比较好理解吧。那么我们既然要用sql去实现他,当务之急,即使如何在我们的sql中获取今年和去年的数据,如果能够获得,我们我们就可以直接套用上面的公式即可。
我们怎么获取相邻两个年份的数据呢,其实我们我们可以用两张相同相同的表想关联,只不过让他们的关联条件不是我们常用的相等,而是进行错位关联。 说的比较抽象,我们直接看sql, 假设表名test ,年份字段year,值字段名value. sql如下:
select * from test t1 left join test t2 on t1.year = t2.year+1
我们通过一个left join关联相同的表,要注意条件是 t1.year = t2.year+1 , 这就是我们所说的错位关联。当t1.year=2018年是, t2.year就是2017年,这样t1和t2就代表了两个相邻年份的数据,有了两个相邻年份,我们就可以计算增长率了。
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
这就是计算增长率的方式。怎么样,你学会了么。
好了,如果对你有帮助,就给点个赞吧!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。