TECH MEDIA

テックメディア


データベース技術
ブログ

【SQL Server】知っていると便利な関数

SQL
目次
  1. 01|はじめに
  2. 02|RANK関数
  3. 03|LAG・LEAD関数
  4. 04|おわりに

1. はじめに

初めまして。12月に入社したエンジニアの尾里です。

今回は実務を通して学んだ、頭の片隅に置いておくと便利かもしれない関数を2つ紹介したいと思います。

2. RANK関数

RANK関数とはSQLで取得したデータに順位をつけて返す関数の事です。番号は1から順に振られ、同順位のデータに対しては同じ番号をつけます。

早速、RANK関数を使っていきましょう。

左のような売上テーブルから、カテゴリーごとに販売数量順に並び替えます。
ここで販売数量が同じ場合は顧客IDの昇順、さらに同じ場合は売上年月日順にし右のような売上テーブルを作成していきます。

 

まずRANK関数は以下の書式で使用します。



RANK() OVER( [PARTITION BY ~] ORDER BY ~)

 

書式に当てはめてみましょう。



RANK() OVER( PARTITION BY カテゴリー ORDER BY 販売数量 DESC, 顧客ID, 売上年月日

 

3. LAG・LEAD関数

LAG関数は前の行を持ってくる関数、LEAD関数は後ろの行を持ってくる関数です。

それでは続いて、LAG関数・LEAD関数を使っていきましょう。

LAG関数を例にとって説明していきます。販売数量をもとに一番右のような”前日の販売数量”を出力していきましょう。

 

まず、LAG関数は以下の書式で使用します。



LAG (該当カラム, n個前) OVER( [PARTITION BY ~] ORDER BY ~ )

 

書式に当てはめてみましょう。



LAG(販売数量, 1) OVER ( ORDER BY 日付 )

これで1日前の販売数量が取得できます。

 

LEAD関数も同様に、以下の書式で使用します。



LEAD(該当カラム, n個後) OVER( [PARTITION BY ~] ORDER BY ~ )

 

4. おわりに

いかがでしたでしょうか?

データ量など使いどころによっては、かえってパフォーマンスが悪くなる場合もあるかもしれませんが、基本的にはパフォーマンスの向上にもつながりますし、様々な集計が容易になり使いこなせるととても便利だと思います。

ぜひ頭の片隅に置いてみると良いかもしれません!

RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?