<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這兩個SQL高級函數,你用過嗎?

          共 1910字,需瀏覽 4分鐘

           ·

          2020-11-03 09:07

          點擊關注上方“SQL數據庫開發(fā)”,

          設為“置頂或星標”,第一時間送達干貨

          SQL Server從2012版本開始,引入了LEAD和LAG函數,這兩個函數可以把之前要關聯(lián)查詢的方法,改為可直接獲取當前數據上下相鄰多少行數據,可以很方便的對上下相鄰兩行的數據進行加減乘除。今天我們就給大家介紹一下這兩個函數的用法。


          LAG函數

          LAG的作用
          LAG 以當前行之前的給定物理偏移量來提供對行的訪問。?在 SELECT 語句中使用此分析函數可將當前行中的值與先前行中的值進行比較。

          LAG的語法
          LAG (scalar_expression [,offset] [,default]) ? ? ?OVER ( [ partition_by_clause ] order_by_clause )
          參數解釋
          scalar_expression
          要根據指定偏移量返回的值。?這是一個返回單個(標量)值的任何類型的表達式。scalar_expression 不能為分析函數。
          offset
          當前行(從中獲得取值)后的行數。?如果未指定,則默認值為 1。?
          OVER
          為開窗函數,LAG函數必須與開窗函數一起使用。

          LAG示例
          WITH T AS
          (
          SELECT 1 ID,10 NUM
          UNION ALL
          SELECT 1,20
          UNION ALL
          SELECT 1,30
          UNION ALL
          SELECT 2,40
          UNION ALL
          SELECT 2,50
          UNION ALL
          SELECT 2,60
          )


          SELECT ID,NUM,
          LAG(NUM) OVER (PARTITION BY ID ORDER BY NUM) AS OneArgs,
          LAG(NUM,1) OVER (PARTITION BY ID ORDER BY NUM) AS TowArgs,
          LAG(NUM,2,0) OVER (PARTITION BY ID ORDER BY NUM) AS ThressArgs
          FROM T

          (提示:可以左右移動代碼)

          結果如下:

          從上面的示例中我們可以看到

          1、針對列OneArgs,組內的NUM列的值默認向后偏移了一行,每組的第一行用默認的NULL來代替

          2、針對TowArgs,使用了2個參數顯示的偏移行,NUM的值也是向后偏移一行。

          3、針對ThreeArgs,不僅使用了顯示的偏移2行,而且第三個參數將偏移后默認值NULL改成了0


          實戰(zhàn)例子:如何求解組內上下兩行的和?

          SELECT ID,NUM,
          NUM+LAG(NUM,1,0) OVER (PARTITION BY ID ORDER BY NUM) AS Result
          FROM T

          結果如下:

          注意:第一行因為默認是0,所以每組第一行的結果是NUM+0=NUM



          LEAD函數

          LEAD函數與LAG函數剛剛相反,它是向前偏移指定的行數,默認是1行。

          語法哈參數與LAG類似,這里就不重復介紹了。我們直接看示例:

          SELECT ID,NUM,
          LEAD(NUM) OVER (PARTITION BY ID ORDER BY NUM) AS OneArgs,
          LEAD(NUM,1) OVER (PARTITION BY ID ORDER BY NUM) AS TowArgs,
          LEAD(NUM,2,0) OVER (PARTITION BY ID ORDER BY NUM) AS ThressArgs
          FROM T

          結果:

          使用情況與LAG函數類似,只是組內數據分別向前偏移了指定行數。


          實戰(zhàn)示例:求解同組內上下兩行的差?

          SELECT ID,NUM,
          LEAD(NUM,1,0) OVER (PARTITION BY ID ORDER BY NUM)-NUM AS Result
          FROM T

          結果:

          每組最后一行默認是0,所以0-NUM=-NUM


          以上就是這兩個函數的相關用法。


          ——End——

          后臺回復關鍵字:1024,獲取一份精心整理的技術干貨
          后臺回復關鍵字:進群,帶你進入高手如云的交流群。
          推薦閱讀
          這是一個能學到技術的公眾號,歡迎關注

          點擊「閱讀原文」了解SQL訓練營
          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日逼com| 亚洲小黄片 | 日逼| 精品国产91久久久久久暴行片 | 天堂在线V |