Присоединяйтесь без создания дубликатов записей - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть 2 таблицы продуктов таблицы и таблицы категорий. Ниже показано, как выглядит таблица категорий -

Product_ID     Category             sub-category     
   123         Furniture             Bookcases             
   123         Furniture             Chairs                
   456         Office supplies       Labels                
   456         Office supplies       Binders               
   456         Office supplies       Binders

Таблица продуктов выглядит следующим образом -

Product_ID   Quantities_sold
   123           300
   456           400

, когда я внутренне присоединяюсь к таблице продуктов и категорий, я вижу много дубликатов из-за различий -категории, как показано ниже-

Product_ID     Category             sub-category     Quantities_sold
   123         Furniture             Bookcases             300
   123         Furniture             Chairs                300
   456         Office supplies       Labels                400
   456         Office supplies       Binders               400
   456         Office supplies       Binders               400

Ожидаемый результат будет примерно таким :-

Product_ID     Category             sub-category     Quantities_sold
   123         Furniture             Bookcases             300
                                     Chairs                
   456         Office supplies       Labels                400
                                     Binders               

Есть ли способ иметь все подкатегории, но без повторяющихся записей?

Примечание. У меня огромный набор данных, содержащий миллионы записей, 26 категорий и 135 подкатегорий.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
  SELECT Product_ID, Category, STRING_AGG(DISTINCT SubCategory ) SubCategories
  FROM `project.dataset.category`
  GROUP BY Product_ID, Category
) c
USING (Product_ID)  

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

Row Product_ID  Category        SubCategories       Quantities_sold  
1   123         Furniture       Bookcases,Chairs    300  
2   456         Office supplies Labels,Binders      400   

или использовать ARRAY_AGG вместо STRING_AGG для получения подкатегорий как массив, как в примере ниже

#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
  SELECT Product_ID, Category, ARRAY_AGG(DISTINCT SubCategory ) SubCategories
  FROM `project.dataset.category`
  GROUP BY Product_ID, Category
) c
USING (Product_ID)   

, в этом случае результат будет таким, как показано ниже

Row Product_ID  Category        SubCategories   Quantities_sold  
1   123         Furniture       Bookcases       300  
                                Chairs       
2   456         Office supplies Labels          400  
                                Binders      
0 голосов
/ 08 февраля 2020

Вы можете использовать SELECT DISTINCT, и он не покажет вам повторяющиеся записи, например:

SELECT DISTINCT Product_ID, Category, sub-category, Quantities_sold
FROM product, category
INNER JOIN category ON category.Product_ID = product.Product_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...