如何在sql中实现对两列数据进行运算作为新的列

  介绍

如何在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语句实现不同记录同一属性列的差值计算

所使用的表的具体结构如下图所示

如何在Sql中实现对两列数据进行运算作为新的列

表中主键是(plateNumber + currentTime)

<强>要实现的查询是:

给定车牌号和查询的时间区间,查询给定的时间区间内所包含记录的currentTime的差值,并计算AverageSpeed和该差值的乘积,求这段时间内的最高速度(HighestSpeed),并按照类型值得不同进行划分。→(类型值只有0和1两个值)

主要思路是,首先能够得出的是相同类型类型下同一个车牌号(也即同一车辆)在给定的时间区间内的currentTime的差值,比如按照currentTime排序号,相邻两条记录currentTime的差值,得出这个以后,其余的都可以通过聚合函数得出。

我们以车牌号为京A111111为例,设计如下图所示的测试用例。

如何在Sql中实现对两列数据进行运算作为新的列

可以看到车牌号为京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中实现对两列数据进行运算作为新的列

经过核对,是我们想要得出的结果。之后将sql对应替换到mybatis的mapper文件中就可以了。

关于如何在sql中实现对两列数据进行运算作为新的列问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

如何在sql中实现对两列数据进行运算作为新的列