溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列

發(fā)布時間:2020-10-28 00:15:15 來源:億速云 閱讀:1120 作者:Leah 欄目:開發(fā)技術(shù)

如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

如下所示:

select a1,a2,a1+a2 a,a1*a2 b,a1*1.0/a2 c from bb_sb

把a表的a1,a2列相加作為新列a,把a1,a2相乘作為新列b,注意:

相除的時候得進行類型轉(zhuǎn)換處理,否則結(jié)果為0.

select a.a1,b.b1,a.a1+b.b1 a from bb_sb a ,bb_cywzbrzb b

這是兩個不同表之間的列進行運算。

補充知識:Sql語句實現(xiàn)不同記錄同一屬性列的差值計算

所使用的表的具體結(jié)構(gòu)如下圖所示

如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列

Table中主鍵是(plateNumber+currentTime)

要實現(xiàn)的查詢是:

給定車牌號和查詢的時間區(qū)間,查詢給定的時間區(qū)間內(nèi)所包含記錄的currentTime的差值,并計算AverageSpeed和該差值的乘積,求這段時間內(nèi)的最高速度(HighestSpeed),并按照type值得不同進行劃分。–>(type值只有0和1兩個值)

主要思路是,首先能夠得出的是相同type類型下同一個車牌號(也即同一車輛)在給定的時間區(qū)間內(nèi)的currentTime的差值,比如按照currentTime排序號,相鄰兩條記錄currentTime的差值,得出這個以后,其余的都可以通過聚合函數(shù)得出。

我們以車牌號為京A111111為例,設(shè)計如下圖所示的測試用例。

如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列

可以看到車牌號為京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可以看到如下圖所示的查詢結(jié)果:

通過核查timediff的值是正確的,這樣之后就可以在這個基礎(chǔ)上添加內(nèi)容了。

完整的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 

顯示結(jié)果如下:

如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列

經(jīng)過核對,是我們想要得出的結(jié)果。之后將sql對應(yīng)替換到mybatis的mapper文件中就可以了。

關(guān)于如何在sql中實現(xiàn)對兩列數(shù)據(jù)進行運算作為新的列問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

sql
AI