如何在sql中实现对两列数据进行运算作为新的列?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<>强如下所示:强>
选择a1, a2, a1 + a2, a1 * a2 b, c a1 * 1.0/a2从bb_sb
引用>把一个表的a1, a2列相加作为新列,把a1, a2相乘作为新列b,注意:
相除的时候得进行类型转换处理,否则结果为0。
选择a.a1 b.b1 a.a1 + b。从bb_sb b1, bb_cywzbrzb b
引用>这是两个不同表之间的列进行运算。
<强> Sql语句实现不同记录同一属性列的差值计算强>
所使用的表的具体结构如下图所示
表中主键是(plateNumber + currentTime)
<强>要实现的查询是:强>
给定车牌号和查询的时间区间,查询给定的时间区间内所包含记录的currentTime的差值,并计算AverageSpeed和该差值的乘积,求这段时间内的最高速度(HighestSpeed),并按照类型值得不同进行划分。→(类型值只有0和1两个值)
主要思路是,首先能够得出的是相同类型类型下同一个车牌号(也即同一车辆)在给定的时间区间内的currentTime的差值,比如按照currentTime排序号,相邻两条记录currentTime的差值,得出这个以后,其余的都可以通过聚合函数得出。
我们以车牌号为京A111111为例,设计如下图所示的测试用例。
可以看到车牌号为京A111111的车辆总共有6条记录,其中类型为0的有两条,类型为1的有4条,
我们首先计算时间的差值,Sql语句书写如下:
选择a.platenumber, a.currenttime, a.type, a.averagespeed, a.highestspeed, currenttime(选择currenttime 从carmultispeedinfo platenumber=a.platenumber 和类型=a.type 和currenttime & lt;a.currenttime ORDER BY currenttime DESC 限制timediff 1) 从carmultispeedinfo通过navicat可以看到如下图所示的查询结果:
通过核查timediff的值是正确的,这样之后就可以在这个基础上添加内容了。
完整的sql语句如下:
选择总和(aa。averagespeed milesdiff * aa.timediff), 马克斯(aa.highestspeed) HighestSpeed, (aa.timediff)作为timediff求和, aa.type (选择a.platenumber, a.currenttime, a.type, a.averagespeed, a.highestspeed, currenttime(选择currenttime 从carmultispeedinfo platenumber=a.platenumber 和类型=a.type 和currenttime & lt;a.currenttime ORDER BY currenttime DESC 限制timediff 1) 从carmultispeedinfo aa aa。platenumber=& # 39;京A111111& # 39; 和aa。currenttime祝辞=1521790124670 和aa。currenttime & lt;=1521790125685 由aa组。类型显示结果如下:
经过核对,是我们想要得出的结果。之后将sql对应替换到mybatis的mapper文件中就可以了。
关于如何在sql中实现对两列数据进行运算作为新的列问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
如何在sql中实现对两列数据进行运算作为新的列