SQL Server の主任機能
SQL Server のリード関数は、自己結合なしで同じ結果セット内の後続の行からデータにアクセスできるようにする分析関数です。
この関数を使用すると、現在の行より前の特定のオフセットにある行にアクセスできます。たとえば、lead 関数を使用すると、現在の行の直後の行、現在の行から 10 行目などを見つけることができます。
この機能により、データベース開発者は、結合やビューの使用などの複雑なタスクなしで行比較を実行できます。
関数の構文
次に、SQL Server での lead() 関数の構文を示します。
LEAD ( スカラー式 [ ,オフセット ] , [ デフォルト ] )
OVER ( [ partition_by_clause ] order_by_clause )
次のリストは、サポートされている引数とその機能です。
- scalar_expression – この引数は、定義されたオフセットに基づく戻り値を示します。これは、単一の値を返す任意の型の式にすることができます。ただし、scalar_expression の値を別の分析/ウィンドウ関数にすることはできません。
- オフセット - これは、値がフェッチされた現在の行位置からの行数を設定します。デフォルトでは、関数は現在の行のすぐ横にある行をフェッチします。同様に、offset パラメーターの値を分析関数または負の整数にすることはできません。
- default – 指定されたオフセット値がターゲット パーティションの範囲を超えている場合、このパラメーターはデフォルト値を設定します。デフォルトでは、関数は NULL を返します。
- PARTITION BY – partition_by 句は、結果セットをさまざまなセクションに分割するルールを定義します。次に、結果の各パーティションに関数が適用されます。
- ORDER BY – 各パーティションの行が適用される論理的な順序を定義します。
この関数は、scalar_expression で定義されたデータ型を返します。返される値が NULL の場合、関数は NULL を返します。
サンプルデータ
サンプル データベースを使用して、リード関数の最適な使用方法を説明します。まず、以下に示すようにクエリを使用します。
DROP DATABASE IF EXISTS インベントリ;
CREATE DATABASE インベントリ;
在庫を使用します。
DROP TABLE IF EXISTS 製品;
CREATE TABLE 製品 (
id int ID 主キーが null ではありません。
商品名 varchar(100),
メーカー varchar(50),
数量 int null ではありません。
価格 int デフォルト 0,
in_stock ビット
);
商品に挿入(商品名、メーカー、数量、価格、在庫あり)
値 ('Apple iPad Air', 'Apple', 100, 569.99, 1),
(「Samsung Galaxy Z Flip 4」、「Samsung」、302、1569.00、1)、
(「ソニー プレイステーション 5」、「ソニー」、500、499.99、1)、
(「Samsung Galaxy Watch-5 Pro」、「Samsung」、600、209/.99、1)、
(「Apple Watch Series 6」、「Apple」、459、379.90、1)、
(「Apple AirPods Pro」、「Apple」、200、199.99、1)、
('55' Class S95B OLED 4K Smart TV', 'Samsung', 900, 1999.90, 1),
(「Odyssey Ark Quantum Mini-LED 曲面ゲーム画面」、「Samsung」、50、2999.90、1);
結果のテーブルは次のとおりです。
例 1 – 結果セットに対する SQL Server の lead() 関数の使用
次の例では、lead() 関数を使用して次の製品の価格を返します。
選択する商品名、
メーカー、
量、
価格、
リード(価格、
1) オーバー (
数量で注文)
から
製品;
結果のテーブル:
最後の列から行がないため、関数は NULL を返します。
例 2 – パーティション セットで SQL Server の lead() 関数を使用する
特定のパーティションで次の製品をフェッチすることもできます。たとえば、製造元に基づいて上記のデータを分割し、各分割に lead() 関数を適用できます。
図の例は次のとおりです。
選択する商品名、
メーカー、
量、
価格、
リード(価格、
1) オーバー (
メーカー別仕分け
数量で注文)
から
製品;
上記のクエリは、メーカーに基づいて行を分割し、各パーティションの値の次の価格を取得する必要があります。
この場合、3 つのパーティションがあります。
結論
この投稿では、SQL Server の lead() 関数の構成要素について理解しました。また、結果セットとパーティション セットに対して lead() 関数を使用する方法も学びました。