crmprogrammer38の日記

主にDWHやSalesforceのプログラムメモです。

【TERADATA】 TERADATAの拡張SQL構文のQUALIFY句は、他のDBでも使えるといいなと思う

TERADATAは分析関数の値でさらに抽出できる

TERADATA拡張のQUALIFY句がある。

QUALIFY句を使って、分析関数の値でさらに条件をかけることができる。

 

select productcode , ammount, rank() over(order by ammount desc)
from sample
qualify rank() over(order by ammount desc) <= 100;

 

こんな感じで使える。(他のDBだと、一度分析関数の副問合せの結果にさらに条件を入れると思うが、上記のようにとても綺麗なSQLで書けるのはうれしいです。

 

ただ、分析関数自体が、煩わしいのもあってあまり使われて無いように感じます。(sum関数のover句内でorder by した際には、 rows between unbounded preceding   and current row がデフォルトで指定される とかね。。最初のとっつきづらさが良くないと思います。)

Oracleの業務システムで分析関数使ったら、そもそもこんな書き方すんなから始まり、order by がコストが高いのでやめろと色々言われたことがあったな。。