2013年12月26日木曜日

SQL「再マージ」入門


「再マージ」は、SAS特有の機能っぽい。
AccessやMySQLで試してみたけど、ダメだった。

以下まとめてみてみました。


①サンプルデータ作成

data DT1;
  input A B;
cards;
1 10
1 20
1 30
2 40
2 50
;
run;




②まずは通常のSQL文

* Aのグループ毎に、Bの最大値を求める ;
proc sql;
  create table  DT2 as
  select  A, max(B) as B2
  from    DT1
  group by  A;
quit;




③「再マージ」を利用したSQL文

proc sql;
  create table DT3 as
  select  A, max(B) as B2, B
  from    DT1
  group by  A
  order by  A, B;
quit;

※ 赤字が②から追記した文。



解説
(1) まず②と同様、Aのグループ毎に、Bの最大値を求めにいきます。





(2) がしかし、select文にはBも指定されています。
そのため以下の元データ「DT1」からBを取ってきて、上記(1)とマージします。








(3)Aのグループ毎に(1)での計算が(2)にマージされます。
出来上がりは、DATAステップの「merge (1)(2); by A」とした時みたいな感じ。(内部処理の動きは違うと思うけど。)








ちなみに、この「再マージ」が行われると、並び順が狂うので、「order by A、B」と並び替えをしています。



ちょっと説明が分かりづらいかもしれないけど、
この仕組みは便利なので、今後活用法を小出ししていこうと思います。

2 件のコメント:

  1. 再マージ、あまり深く考えたことなかったですが、確かに独特ですね。
    続きが楽しみです!
    今年も本当にお世話になりました、勉強させていただきました。有難うございます!
    よいお年を。

    返信削除
    返信
    1. こちらこそ、お世話になりました!
      毎日ブログみて沢山勉強させていただきました。
      ちなみにロゴ作ったんですね!なんかいいですね、こんな将棋の駒があったら欲しいです。

      よいお年を!

      削除