sql >> データベース >  >> RDS >> Database

データチュートリアル:ウィンドウ関数の使用

    ウィンドウ関数とは何ですか?

    ウィンドウ関数を使用すると、ユーザーは結果セット(通常はテーブルまたは別のクエリの結果)のパーティション(つまり、サブグループまたはセクション)に対して計算を実行できます。クエリで定義されたグループごとに1つの値のみを返す従来の集計関数とは異なり、ウィンドウ関数は入力行ごとに1つの値を返します。

    ウィンドウ関数はどのように役立ちますか?

    ウィンドウ関数は、より複雑なSQLの概念に代わるものを提供することにより、データセットのパーティション(ウィンドウ)を分析するクエリの効率を高め、複雑さを軽減します。派生クエリ。一般的な使用例は次のとおりです。

    • 特定のウィンドウ内でのランキング結果(グループごとのランキングなど)
    • 特定のウィンドウの別の行からデータにアクセスする(例:期間ごとのレポート)
    • 特定のウィンドウ内の集計(例:現在の合計):
    ウィンドウ関数の使用方法

    ウィンドウ関数は、OVERで開始されます 条項であり、次の3つの概念を使用して構成されます。

    • ウィンドウパーティション(PARTITION BY )-行をパーティションにグループ化します
    • ウィンドウの順序付け(ORDER BY )-各ウィンドウ内の行の順序または順序を定義します
    • ウィンドウフレーム(ROWS )-指定された行からのオフセットを使用してウィンドウを定義します
    構文の概要
    function (expression) OVER
         ( [ PARTITION BY expression_list ]
           [ ORDER BY order_list ]
           [ ROWS frame_clause ])
    
    定義
    • expression_list:カンマで区切られた式のリスト、通常は列名
    • order_list:カンマで区切られた式のリスト、通常は列名
    • frame_clause:CURRENT ROWを使用してオフセットを定義します 、_value_ PRECEDINGUNBOUNDED PRECEDING_value_ FOLLOWINGUNBOUNDED FOLLOWING

    ランキング:グループごとのランキング

    SELECT
          campaign
        , month
        , total_cost
        , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
    FROM Cost_by_Month
    LIMIT 8
    

    前の行:期間ごとの分析

    SELECT
          campaign
        , month
        , total_cost
        , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
    FROM Cost_by_Month
    WHERE campaign = 'TV'
    LIMIT 4
    

    ウィンドウ内の集計:現在の合計

    SELECT
        campaign, month, monthly_cost
      , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
        PRECEDING and CURRENT ROW) as "running cost total"
    FROM Cost_by_Month
    

    ドキュメントと機能のリスト:

    使用法と構文には、データベースごとに微妙な違いがあることに注意してください。実装に固有の情報については、以下に提供されているソース固有のドキュメントを使用してください。

    Postgres
    • チュートリアル
    • 機能
    赤方偏移
    • チュートリアル
    • 機能
    オラクル
    • チュートリアル

    SQLServer

    • チュートリアル

    BigQuery

    • チュートリアル

    1. SQLiteAssetHelperを使用して暗号化されたDBからデータを読み取るにはどうすればよいですか?

    2. MariaDB LOCALTIMESTAMP()の説明

    3. 同期統計の更新の追跡

    4. PL / SQLで現在の日付を取得する方法は?