我有下表
type attribute order
1 11 1
1 12 2
2 11 1
2 12 2
3 15 1
3 16 2
4 15 1
4 16 2
我需要了解哪些类型具有相同的属性,然后为它们分配新的ID。订单栏也可以,如果它有用,因为每个属性只能有一个订单,但您不需要使用它。
理想情况下,结果集如下所示:每个类型都有一个新的id,它基于第一个表中的属性。
type new_id
1 1
2 1
3 2
4 2
我打算尝试根据订单列来转动表格并连接属性ID以创建新的ID,但我不能使用交叉表,而且类型的属性数量可能会有所不同,我需要为此负责。
有关该怎么做的任何建议?
答案 0 :(得分:0)
这很有效,可能有更好的方法来实现它,但它是我想到的:
shell=True
输出:
SELECT UNNEST(types) AS type, new_id
FROM (
SELECT ARRAY_AGG(type) AS types, ROW_NUMBER() OVER() AS new_id
FROM (
SELECT type, ARRAY_AGG(attribute ORDER BY attribute) AS attr
FROM t
GROUP BY type
) x
GROUP BY attr
) y
首先,它获取每种类型的属性列表,然后获取每个公共属性列表的类型列表(这是确保每个类型共享相同属性的位置)并为每个组获取新的id类型。然后不要把每个类型放在一个新行上,并且该行号是新的id。