データベース技術
ブログ
【SQL Server】知っていると便利な関数
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. おわりに
いかがでしたでしょうか?
データ量など使いどころによっては、かえってパフォーマンスが悪くなる場合もあるかもしれませんが、基本的にはパフォーマンスの向上にもつながりますし、様々な集計が容易になり使いこなせるととても便利だと思います。
ぜひ頭の片隅に置いてみると良いかもしれません!