[SQL]PostgreSQLの幾何データ演算子TIPS
PostgreSQLには豊富な幾何データ型と幾何データを扱うための演算子があります。
主に地理データを扱う時に使用することが多いのですが、地理データ以外に使っても便利な効果が得られます。
例えば、ある二つのデータ(ここでは、「価格」と「大きさ」とします)が、最大値からどれだけ離れているかを求めたい場合は、以下のクエリで最大値からの距離が求めることができます。
(先に求めておいた最大値と比較したいカラムを、それぞれpoint型に型変換したのち「<->」演算子で2点の距離を出力します)
1 |
SELECT point(price, itemSize) <-> point(maxPrice, maxItemSize) from example_table |
あるいは、複数のカラムの値が、ある範囲内に収まっているかどうか? は以下のクエリで判定することができます。
1 |
select box(point(price, itemSize), point(cost, amant)) ~ box(point(5000, 60), point(1200, 10)) from example_table |
各カラムの値が、指定した範囲内に収まっていれば「真」が返ってきます。
その他にも、データが指定した範囲より右に有るか左にあるか?という比較が行えたり、boxの中心点の距離を取得することで、「どのくらい似ているか?」の指標が得られたりするので、簡単なレコメンドやクラスタリングなどを行いたいときに、使ってみると面白いかもしれません。