Объедините первый ряд со всеми остальными рядами | Большой запрос - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь найти для клиентов все возможные пути покупки. То, как я сейчас представляю данные, выглядит следующим образом:

email           purchase_order  sku      first_order  second_order  third_order  
abc@email.com   1               PS2525   PS2525       null          null         
abc@email.com   2               PS2525   PS2525       PS2525        null         
abc@email.com   2               LG1515   PS2525       LG1515        null         
abc@email.com   3               PS2525   PS2525       null          PS2525       
abc@email.com   3               RG7578   PS2525       null          RG7578       

Но то, что я ищу, - это маршрут каждой покупки. Я бы хотел, чтобы мои данные выглядели так:

email           first_order  second_order  third_order  
abc@email.com   PS2525       PS2525        PS2525       
abc@email.com   PS2525       PS2525        RG7578       
abc@email.com   PS2525       LG1515        PS2525       
abc@email.com   PS2525       LG1515        RG7578    

Здесь показаны все маршруты, по которым покупатель выбрал после своего первого заказа. Есть ли способ создать такой тип таблицы? Мне трудно придумать, как это сделать.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT email, o1.sku AS first_order, o2.sku AS second_order, o3.sku AS third_order
FROM `project.dataset.table` o1
LEFT JOIN `project.dataset.table` o2
USING(email) 
LEFT JOIN `project.dataset.table` o3
USING(email) 
WHERE o1.purchase_order = 1
AND o2.purchase_order = 2
AND o3.purchase_order = 3

Если применить к образцу данных из вашего вопроса - результат будет

Row email           first_order second_order    third_order  
1   abc@email.com   PS2525      PS2525          PS2525   
2   abc@email.com   PS2525      PS2525          RG7578   
3   abc@email.com   PS2525      LG1515          PS2525   
4   abc@email.com   PS2525      LG1515          RG7578   
0 голосов
/ 09 июля 2020

Похоже, вам нужна агрегация:

select email, sku, max(first_order), max(second_order), max(third_order)
from t
group by email, sku;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...