Я запрашиваю свою БД для извлечения некоторой информации из разных таблиц. Мне удалось получить приемлемый результат, который я, вероятно, мог бы использовать вне SQL. Результат, который я получил, очень неэффективен, и мне интересно, есть ли способ заставить SQL выполнять некоторую работу. В принципе, мне нужно более эффективно группировать данные и отбрасывать некоторые из них.SQL - «частичная» группа, различное поведение для разных столбцов
Мои текущие результаты запроса в таблице, которые могут быть упрощены следующим образом:
product_id | person_id | person_type | person_address | other_column
1 | 1001 | 1 | 999 Main St | info about product 1
1 | 1245 | 0 | | info about product 1
1 | 5133 | 2 | 101 Sql St | info about product 1
1 | 9191 | 0 | 1 Query Ave | info about product 1
2 | 5451 | 1 | 40 Table Rd | info about product 2
2 | 6610 | 0 | | info about product 2
Я хотел бы GROUP BY product_id
, но сохраняя отдельные person_id
и person_address
если person_type=0
. Затем соедините адреса всех person_id
, которые разделяют те же product_id
. Держите только одно значение от other_column
. Применительно к таблице выше, он должен выглядеть следующим образом:
product_id | person_id | person_address | other_address | other_column
1 | 1245 | | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
1 | 9191 | 1 Query Ave | 999 Main St; 101 Sql St | info about product 1
2 | 6610 | | 40 Table Rd | info about product 2
-
В качестве альтернативы, второй-лучшим решением было бы следующее: GROUP BY product_id
, держать person_id
, которые имеют person_type=0
и сцепить если более одной акции те же product_id
, объедините person_address
и сохраните только один other_column
. Результат должен выглядеть следующим образом таблице:
product_id | person_id | person_address | other_column
1 | 1245; 9191 | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
2 | 6610 | 40 Table Rd | info about product 2
-
Чтобы дать некоторый фон, у меня есть 2 цели: первая состоит в извлечении other_column
но отбрасывать ненужные дубликаты. Это текстовая информация настолько тяжелая. Вторая цель заключается в том, чтобы получить информация о местоположении для тех person_id
, которые не имеют person_address
.
(я попытался найти подобные вопросы, не нашли ничего.)