您好,登錄后才能下訂單哦!
如何在sql中實現對兩列數據進行運算作為新的列?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
如下所示:
select a1,a2,a1+a2 a,a1*a2 b,a1*1.0/a2 c from bb_sb
把a表的a1,a2列相加作為新列a,把a1,a2相乘作為新列b,注意:
相除的時候得進行類型轉換處理,否則結果為0.
select a.a1,b.b1,a.a1+b.b1 a from bb_sb a ,bb_cywzbrzb b
這是兩個不同表之間的列進行運算。
補充知識:Sql語句實現不同記錄同一屬性列的差值計算
所使用的表的具體結構如下圖所示
Table中主鍵是(plateNumber+currentTime)
要實現的查詢是:
給定車牌號和查詢的時間區間,查詢給定的時間區間內所包含記錄的currentTime的差值,并計算AverageSpeed和該差值的乘積,求這段時間內的最高速度(HighestSpeed),并按照type值得不同進行劃分。–>(type值只有0和1兩個值)
主要思路是,首先能夠得出的是相同type類型下同一個車牌號(也即同一車輛)在給定的時間區間內的currentTime的差值,比如按照currentTime排序號,相鄰兩條記錄currentTime的差值,得出這個以后,其余的都可以通過聚合函數得出。
我們以車牌號為京A111111為例,設計如下圖所示的測試用例。
可以看到車牌號為京A111111的車輛總共有6條記錄,其中type為0的有兩條,type為1的有4條,
我們首先計算時間的差值,sql語句書寫如下:
SELECT a.platenumber, a.currenttime, a.type, a.averagespeed, a.highestspeed, currenttime - (SELECT currenttime FROM carmultispeedinfo WHERE platenumber = a.platenumber AND type = a.type AND currenttime < a.currenttime ORDER BY currenttime DESC LIMIT 1)AS timediff FROM carmultispeedinfo a
通過navicat可以看到如下圖所示的查詢結果:
通過核查timediff的值是正確的,這樣之后就可以在這個基礎上添加內容了。
完整的sql語句如下:
SELECT Sum(aa.averagespeed * aa.timediff) AS milesdiff, Max(aa.highestspeed) AS HighestSpeed, Sum(aa.timediff) AS timediff, aa.type FROM (SELECT a.platenumber, a.currenttime, a.type, a.averagespeed, a.highestspeed, currenttime - (SELECT currenttime FROM carmultispeedinfo WHERE platenumber = a.platenumber AND type = a.type AND currenttime < a.currenttime ORDER BY currenttime DESC LIMIT 1) AS timediff FROM carmultispeedinfo a)aa WHERE aa.platenumber = '京A111111' AND aa.currenttime >= 1521790124670 AND aa.currenttime <= 1521790125685 GROUP BY aa.type
顯示結果如下:
經過核對,是我們想要得出的結果。之后將sql對應替換到mybatis的mapper文件中就可以了。
關于如何在sql中實現對兩列數據進行運算作為新的列問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。