【初学者必見!】SQLの基本、実務使用例を徹底解説!LAG関数編

【初学者必見!】SQLの基本、実務使用例を徹底解説!LAG関数編 SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

本記事は、SQLの基本、実務使用例編になります。

SQLの基礎に関しましては、

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

本編に入ります!

LAGとは?

LAG(列名)を使うと、「現在の行から見て、指定した列の直前の行の値」を取得できます。

特に、売上の前日との差分を出すなど、過去データとの比較に便利です。

たとえば、日ごとの売上が並んでいるときに、

日付売上
6月1日1000
6月2日1200
6月3日1100

このようなデータがあったとします。

「6月2日の売上 1200」は「前の日(6月1日)の売上 1000」と比べたいですよね。

でも、SQLでは「前の行を見に行く」ということはふつうできません。
そこで出てくるのが LAG です。

LAGで売上列を表現すると…

今の行LAG(売上)
6月1日なし(NULL)
6月2日1000(←前の行)
6月3日1200(←前の行)

実務レベルの使用例を見ていこう!

筆者
筆者

実際に、SQLを使用してデータを確認していきましょう。

SQLに関しては以下を使用して解説していきます。

create table文、select文、insert文、update文、delete文、

drop table文、につきましては、過去にアップロードした

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

目次の、「ふりかえり」のところにそれぞれの記事のリンクが

貼ってあるよ!

または、サイドバーのカテゴリーにSQLがあるから、そちらからでも

参照できます!

Oracle Live SQLで実行していきます!

今回、実行するSQLの一覧

テーブル作成・データ挿入

create table 売上データ (
    日付 date,
    店舗名 varchar2(20),
    売上 number
);

insert into 売上データ values (date '2024-06-01', '新宿店', 1000);
insert into 売上データ values (date '2024-06-02', '新宿店', 1200);
insert into 売上データ values (date '2024-06-03', '新宿店', 1100);
insert into 売上データ values (date '2024-06-01', '渋谷店', 800);
insert into 売上データ values (date '2024-06-02', '渋谷店', 900);
insert into 売上データ values (date '2024-06-03', '渋谷店', 950);
commit;

LAGを使ったSELECT文

select
    店舗名,
    日付,
    売上,
    lag(売上) over(partition by 店舗名 order by 日付) as 前日売上,
    売上 - lag(売上) over(partition by 店舗名 order by 日付) as 売上差分
from
    売上データ
order by
    店舗名,
    日付;

解説ポイント

用語説明
LAG(売上)前の行(前日)の売上を取得
PARTITION BY 店舗名店舗ごとに独立して処理
ORDER BY 日付日付順に並べて過去データを参照

まとめ

筆者
筆者

LAG関数について解説しました。

次回もお楽しみに!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました