6 つのビンを持つコロプレス マップの場合ntile()、PostgreSQL 9.4 で各値をそれぞれのグループにビン化するために使用しています。
WITH cte AS (
SELECT random() * 99 + 1 AS value
FROM generate_series(1, 1000)
)
SELECT value, ntile(6) OVER (ORDER BY value) AS ntile
FROM cte;
結果:
value | ntile
---------+----------
1.08 | 1
1.11 | 1
... | ...
しかし、最近、CartoDB ( https://github.com/CartoDB/cartodb-postgresql/blob/master/scripts-available/CDB_QuantileBins.sql )のおかげでいくつかのビニング SQL 関数に出くわし、この関数をアプリケーションに組み込みたいと思いました。私が遭遇した問題は、CartoDB 関数が配列を返し、その時点で各値をそれぞれのビンに配置する方法を見つけなければならないことです。おそらく関数を使用してこれを行うネイティブSQLの方法はありますwindowか、それともカスタム関数を使用して行う必要がありますか?
WITH cte AS (
SELECT ARRAY_AGG(random() * 99 + 1) AS vals
FROM generate_series(1,1000)
)
SELECT CDB_QuantileBins((SELECT vals FROM cte)::numeric[], 6);
結果:
cdb_quantilebins
-----------------------
{19.0055054393597,37.2587848943658,53.8059964138083,67.6696971417405,84.0905840680934,99.8241742462851}