这是我的数据集的方式。我有customerid
和节目名称
客户可以拥有多个程序名称。我想对数据和PARTITION BY customerId和ORDER BY程序名称进行排名。但我想给一个特定的节目'abc'排名第一。然后我可以只选择一个等级并删除重复。
有没有办法根据程序等于'abc'进行排名和排序?
答案 0 :(得分:1)
我想按客户排序数据和分区,并按程序名称排序。但我想给一个特定的节目'abc'排名第一。
假设程序名称不能为NULL - 下面应该做的伎俩
SELECT customerid, program,
RANK() OVER(PARTITION BY customerid ORDER BY IF(program = 'abc', NULL, program)) AS rnk
FROM yourTable
您可以测试/播放虚拟数据,如下所示
#standardSQL
WITH yourTable AS (
SELECT pair.customerid, pair.program
FROM UNNEST([STRUCT<customerid INT64, program STRING>
(1,'aaa'), (1, 'p2'), (1, 'abc'), (1, 'p3'),
(2,'x7'), (2, 'aba'), (2, 'abc'), (2, 'x4')
]) AS pair
)
SELECT customerid, program,
RANK() OVER(PARTITION BY customerid ORDER BY IF(program = 'abc', NULL, program)) AS rnk
FROM yourTable
ORDER BY customerid, rnk
结果将是
customerid program rnk
1 abc 1
1 aaa 2
1 p2 3
1 p3 4
2 abc 1
2 aba 2
2 x4 3
2 x7 4