1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        面試時,你應(yīng)該知道的5個 SQL 窗口函數(shù)

        共 2138字,需瀏覽 5分鐘

         ·

        2022-01-21 01:40

        關(guān)注"Python學習與數(shù)據(jù)挖掘",

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

        資料專欄

        李航老師《統(tǒng)計學習方法(第二版)》課件&代碼

        【視頻+PPT】李宏毅老師機器學習40講

        SQL是數(shù)據(jù)世界中的通用語言,是數(shù)據(jù)從業(yè)人員最重要的技能之一。許多數(shù)據(jù)探索、數(shù)據(jù)操作、管道開發(fā)和儀表板創(chuàng)建都可以通過 SQL 完成的。

        偉大的數(shù)據(jù)科學家與優(yōu)秀的數(shù)據(jù)科學家的區(qū)別在于,偉大的數(shù)據(jù)科學家可以盡可能多地利用 SQL 的功能來處理數(shù)據(jù)。要充分利用 SQL 提供的所有功能,很大一部分是要知道如何使用窗口函數(shù)。

        1、帶有 LEAD() 和 LAG() 的增量

        LEAD()和 LAG()主要用于將某個時間段與給定指標的前一個時間段進行比較,比如:

        • 獲得每年銷售額與上一年銷售額之間的差值
        • 獲得每月注冊/轉(zhuǎn)換/網(wǎng)站訪問次數(shù)的增量
        • 按月比較用戶流失率

        以如何查詢成本的每月百分比變化為例

        with?monthly_costs?as?(
        ????SELECT
        ????????date
        ??????,?monthlycosts
        ??????,?LEAD(monthlycosts)?OVER?(ORDER?BY?date)?as
        ????????previousCosts
        ????FROM
        ????????costs
        )SELECT
        ????date
        ??,?(monthlycosts?-?previousCosts)?/?previousCosts?*?100?AS
        ????costPercentChange
        FROM?monthly_costs

        2、使用 SUM() 或 COUNT() 求和

        以 SUM() 或 COUNT() 開頭的窗口函數(shù)簡單地計算運行總計。當你想要顯示特定指標隨時間的增長時,這是一個必備的工具,它在以下情況下很有用:

        • 獲得一段時間內(nèi)的總收入和成本
        • 獲取每個用戶在應(yīng)用程序上花費的總時間
        • 獲取一段時間內(nèi)的總轉(zhuǎn)化次數(shù)

        以如何包含每月費用的累積總和列:

        SELECT
        ????date
        ??,?monthlycosts
        ??,?SUM(monthlycosts)?OVER?(ORDER?BY?date)?as?cumCosts
        FROM
        ????cost_table

        3、使用 AVG() 的移動平均線

        AVG() 在窗口函數(shù)中非常強大,因為它可以計算一段時間內(nèi)的移動平均值。移動平均線是一種簡單但有效的短期預(yù)測值的方法。比如

        • 獲取每周銷售額的總體趨勢
        • 獲取每周轉(zhuǎn)換或網(wǎng)站訪問的總體趨勢。例子:

        以查詢是獲取轉(zhuǎn)化次數(shù)的 10 天移動平均值的示例

        SELECT
        ????Date
        ??,?dailyConversions
        ??,?AVG(dailyConversions)?OVER?(ORDER?BY?Date?ROWS?10?PRECEDING)?AS
        ????10_dayMovingAverage
        FROM
        ????conversions

        4、ROW_NUMBER()

        當想要獲取第一條或最后一條記錄時,ROW_NUMBER() 特別有用。

        如何使用 ROW_NUMBER() 獲取每個用戶訪問的第一個日期。

        with?numbered_visits?as?(
        ????SELECT
        ????????memberId
        ??????,?visitDate
        ??????,?ROW_NUMBER()?OVER?(PARTITION?BY?customerId?ORDER?BY
        ????????purchaseDate)?as?rowNumber
        ????FROM
        ????????gym_visits
        )SELECT
        ????*
        FROM
        ????numbered_visits
        WHERE?
        ????rowNumber?=?1

        5、使用 DENSE_RANK() 進行記錄排名

        DENSE_RANK() 與 ROW_NUMBER() 類似,只是它為相等的值返回相同的排名。例如:

        • 想拉出本周觀看次數(shù)最多的 10 部 Netflix 節(jié)目
        • 想根據(jù)花費的金額獲得前 100 名用戶
        • 想查看 1000 個最不活躍用戶的行為 例子:

        如果你想按總銷售額對頂級客戶進行排名,則 DENSE_RANK() 將是一個合適的函數(shù)

        SELECT
        ????customerId
        ??,?totalSales
        ??,?DENSE_RANK()?OVER?(ORDER?BY?totalSales?DESC)?as?rank
        FROM
        ????customers

        總結(jié)

        如果你對這5個概念了如指掌,那么當涉及到大多數(shù)SQL窗口函數(shù)問題時,你會做得很好。有所收獲,點贊支持。

        長按或掃描下方二維碼,后臺回復(fù):加群,即可申請入群。一定要備注:來源+研究方向+學校/公司,否則不拉入群中,見諒!

        長按三秒,進入后臺


        推薦閱讀

        瀏覽 57
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一级片弄逼 | 国产91对白叫床清晰播放 | 在线小视频| 尤物黄视频 | 全黄做爰大片 | 91成人无码| 各类女厕wc偷窥 japanese一级淫片 | 欧美熟女视频无码视 | 美女网站视频色 | 久久婷婷成人综合色怡春院 |