2017-10-01 4 views
1

私はバケット列から部分集合を取り出し、交差点をとってみようとしています。交差N width_buckets

元のテーブルの他の列が選択されます。

私はまた、一連のフィルタリングにも対応しています。

次のコードはcol1が存在しません - わからないこれは正しい方法です。

WITH ranges AS (
    SELECT 
    min(col1) AS c1min, 
    max(col1) AS c1max, 
    min(col2) AS c2min, 
    max(col2) AS c2max 
    FROM csv_test 
), 
f1 AS (
    SELECT width_bucket(col1,c1min,c1max,12) AS b1 
    FROM csv_test, ranges 
    ORDER BY b1 ASC 
), 
f2 AS (
    SELECT width_bucket(col2,c2min,c2max,12) AS b2 
    FROM csv_test, ranges 
    ORDER BY b2 ASC 
) 
SELECT b1, b2, c3, c4, c18 
FROM csv_test 
WHERE 
b1 BETWEEN 0 AND 5 
AND 
b2 BETWEEN 3 AND 7; 
+1

あなたはhttp://dbfiddle.uk/?rdbms=postgres_9(** [デモ]のような何かをしたいですか。 6&fiddle = 1ea8a68f0e5fb8eb8db2f98979409bd1)**? – lad2025

+1

それは完璧です。私が必要としていたのは、LATERAL結合でした。ありがとうございました。 –

答えて

1

ジョインLATERALを使用することができます。

SELECT t.*, s2.* 
FROM csv_test t 
,LATERAL (SELECT 
      min(col1) AS c1min, 
      max(col1) AS c1max, 
      min(col2) AS c2min, 
      max(col2) AS c2max 
      FROM csv_test) AS s 
,LATERAL (SELECT width_bucket(col1,c1min,c1max,12) AS b1, 
       width_bucket(col2,c2min,c2max,12) AS b2) AS s2 
WHERE b1 BETWEEN 0 AND 5 
    AND b2 BETWEEN 3 AND 7; 

DBFiddle Demo