【问题标题】:Intersecting N width_buckets相交 N 个 width_buckets
【发布时间】:2017-10-01 17:40:11
【问题描述】:

我正在尝试从分桶列中获取子集,然后获取交叉点。

这将从原始表中选择其他列。

我也愿意进行系列过滤。

下面的代码报告 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;

【问题讨论】:

  • 你想要类似 Demo 的东西吗?
  • 那是完美的。 LATERAL 连接是我需要的。谢谢。

标签: sql postgresql intersection


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多