如何获取数据集匹配的行

问题描述 投票:0回答:1

我有一张表格,描述了产品的销售地点,如下:

产品 位置
A 1,2,3
B 2
C 7,8,9,10
D 2,3,4
E 7,8,9

我想获得在 hive sql 中匹配两个或更多销售位置的产品

预期结果:

A,D
C,E
sql hive
1个回答
0
投票
  1. 您可以首先取消嵌套位置,这是在 CTE 中完成的
    positions_exploded
  2. 然后是SELF JOINED,条件是位置必须相同并且产品对只计算一次。
  3. 最后我们计算具有 2 个或更多匹配位置的对。

我在 postgres 中尝试过,因为我没有配置单元,但是我认为你需要更改配置单元的一些语法,你可以像这个示例

所示那样爆炸

在 Postgres 中摆弄

WITH positions_exploded AS (
    SELECT
        product,
        unnest(position) AS pos
    FROM
        product_position
)
  ,
 
matched_products AS (
    SELECT
        p1.product AS product1,
        p2.product AS product2,
        COUNT(*) AS common_positions
    FROM
        positions_exploded p1
    JOIN
        positions_exploded p2
    ON
        p1.pos = p2.pos AND p1.product < p2.product
    GROUP BY
        p1.product, p2.product
    HAVING
        COUNT(*) >= 2
)
SELECT
    product1,
    product2
FROM
    matched_products;

输出

产品1 产品2
A D
C E

您还可以用逗号分隔值连接输出,例如

STRING_AGG(product1 || ',' || product2, ', ') AS product_pairs
© www.soinside.com 2019 - 2024. All rights reserved.