SQL リード関数

Sql Rido Guan Shu



SQL lead() 関数を使用すると、現在の行から特定のオフセットで次の行にアクセスできます。つまり、 lead() 関数を使用すると、現在の行から次の行にアクセスできます。オフセット値を指定すると、現在の行から次の 1、2、3 行などにアクセスできます。

これは、前の行にアクセスできる lag() 関数の逆です。







SQL Lead() 関数

関数の構文は次のとおりです。



LEAD(値式, オフセット [, デフォルト])
以上 (
[PARTITION BY パーティション式]
ORDER BY 並べ替え式 [ASC |説明]
);

サポートされている引数は次のとおりです。



  1. 値の式 – 前の行の戻り値を指定します。式は単一の値に評価される必要があります。
  2. オフセット – 現在の行から何行先にアクセスするかを指定します。
  3. デフォルト – オフセットがパーティションの範囲外にある場合は、デフォルト値を設定します。デフォルトでは、値は NULL に設定されます。
  4. パーティション分割 – データを分割する方法を指定します。
  5. 注文方法 – 各パーティション内の行の順序形式を設定します。

サンプルデータのセットアップ

lead() 関数の仕組みに入る前に、デモ用に基本的なテーブルを設定することから始めましょう。





CREATE TABLE 製品 (
product_id INT 主キー AUTO_INCREMENT、
製品名 VARCHAR(255)、
カテゴリ VARCHAR(255)、
価格 DECIMAL(10, 2),
数量INT、
有効期限 DATE、
バーコード BIGINT
);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('シェフハット 25cm',
'ベーカリー'、
24.67、
57、
'2023-09-09',
2854509564204);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('うずらの卵 - 缶詰',
'パントリー'、
17.99、
67、
'2023-09-29',
1708039594250);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('コーヒー - エッグ ノッグ カプチーノ',
'ベーカリー'、
92.53、
10、
'2023-09-22',
8704051853058);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('梨 - とげのある',
'ベーカリー'、
65.29、
48、
'2023-08-23',
5174927442238);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('パスタ - エンジェル ヘア',
'パントリー'、
48.38、
59、
'2023-08-05',
8008123704782);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('ワイン - プロセッコ ヴァルドビアッデネ',
'生産する'、
44.18、
3、
'2023-03-13',
6470981735653);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('ペストリー - フレンチ ミニ盛り合わせ',
'パントリー'、
36.73、
52、
'2023-05-29',
5963886298051);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('オレンジ - 缶詰、マンダリン',
'生産する'、
65.0、
1、
'2023-04-20',
6131761721332);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)
値 ('豚肩肉',
'生産する'、
55.55、
73、
'2023-05-01',
9343592107125);

入れる
の中へ
製品 (製品名、
カテゴリー、
価格、
量、
有効期限、
バーコード)

values ('Dc Hikiage Hira Huba',
'生産する'、
56.29、
53、
'2023-04-14',
3354910667072);

例 1:

この場合、製品情報を含む「製品」テーブルにアクセスできます。現在の行から次のバーコードを取得するとします。

lead() 関数は次のように使用できます。



次のような従業員情報を含むテーブルがあるとします。

選択する
商品名、
価格、
リード(バーコード)オーバー(カテゴリ別のパーティション)
までに注文する
価格は昇順) next_item として
から
製品p;

指定されたコードは、カテゴリに基づいてデータを分割します。次に、lead() 関数を使用してパーティション内の次のバーコードをフェッチします。

結果の出力は次のようになります。

例 2:

特定の列に次の行がない場合 (範囲外)、関数は前の例で示したように値を NULL に設定します。

スコープ外のアクセスにデフォルト値を設定するには、次の手順を実行します。

選択する
商品名、
価格、
lead(barcode, 1, 'N/A') over (カテゴリ別のパーティション)
までに注文する
価格は昇順) next_item として
から
製品p;

デフォルト値を「N/A」に設定します。これにより、次の出力に示すように、範囲外の値が置き換えられます。

注記 : オフセットを 1 に設定することは、値を指定しないことと同様です。

例 3:

現在の行から次の 2 行にアクセスするとします。これを行うには、オフセット値を 2 に設定します。

クエリの例を以下に示します。

選択する
商品名、
価格、
lead(barcode, 2, 'N/A') over (カテゴリ別のパーティション)
までに注文する
価格は昇順) next_item として
から
製品p;

このクエリは、次に示すように、各パーティションの次の 2 行を返します。

ほら、ありますよ!

結論

このチュートリアルでは、lead() 関数を使用して現在の行から次の項目を取得する方法を学びました。