ふりかえり

筆者
本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

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子
目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーに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関数について解説しました。
次回もお楽しみに!










コメント