Я создаю таблицу из набора данных, у которого есть столбцы, верхние N в нескольких областях и разделенные на две категории флагом ba.
Запрос, который я использую для этого, следующий:
WITH ranking as (
SELECT order, name, id, area, flag,
RANK() OVER (PARTITION BY area, flag ORDER BY orders DESC) as rank
FROM `dataset` d
)
SELECT area, current_date() as date,
case when rank = 1 then CONCAT(id,'_', name) end as top_1_in_the_city,
case when rank = 2 then CONCAT(id,'_', name) end as top_2_in_the_city,
case when rank = 3 then CONCAT(id,'_', name) end as top_3_in_the_city,
case when rank = 1 AND flag = 0 then CONCAT(id,'_', name) end as top_1_in_the_city_core,
case when rank = 2 AND flag = 0 then CONCAT(id,'_', name) end as top_2_in_the_city_core,
case when rank = 3 AND flag = 0 then CONCAT(id,'_', name) end as top_3_in_the_city_core,
case when rank = 1 AND flag = 1 then CONCAT(id,'_', name) end as top_1_in_the_city_nocore,
case when rank = 2 AND flag = 1 then CONCAT(id,'_', name) end as top_2_in_the_city_nocore,
case when rank = 3 AND flag = 1 then CONCAT(id,'_', name) end as top_3_in_the_city_nocore,
FROM ranking
Но он возвращает много пустых значений и некоторые имена, которые раньше появлялись только один раз, теперь появляются в нескольких вершинах и конечно, он не может быть первым и четвертым одновременно, например:
date area top_1_in_the_city top_2_in_the_city top_1_in_the_city_core
05/05/1989 null James null
05/05/1989 James null null
05/05/1989 null null null
Ожидаемый результат был:
date area top_1_in_the_city top_2_in_the_city top_1_in_the_city_core top_1_in_the_city_nocore
05/05/1989 Pedro James James Pedro
05/05/1989 Arthur Don Arthur Michael
05/05/1989 Fulano John John Someone
Чтобы исправить это, я сначала попробовал простейший случай без флага, но имел ту же проблему. Затем я попытался объединить каждый случай, но он остался неизменным! Заранее спасибо