SQL-запрос с объединением неуникальных записей - PullRequest
0 голосов
/ 05 декабря 2018

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

Table1

Order_id              Item_Revenue            Item_id
1                     30 €                    22222222
1                     20 €                    11111111
1                     10 €                    33333333
2                     5 €                     55555555

Table2

package_id           Order_id                 shipping_costs
456                  1                        1 €
567                  1                        2 €
789                  1                        3 €
999                  2                        2 €

Вывод, который мне нужен: я хочу показать доход с позиции и стоимость доставки по Order_Id

Order_ID          count(item_id)      sum(item_revenue)  sum(shipping_costs)
1                 3                   60 €                6 €
2                 1                   5 €                 2 €

Моя первая попытка была:

Select
sum(t1.item_revenue),
count(t1.item_id),
sum(t2.shipping_costs),
from table1 t1
left join table2 t2 on t1.order_id = t2.order_id
group by t1.order_id

Но это не работает, потому что order_id не уникален.

Пожалуйста, посмотрите на мой пример:

Мне бы очень повезло, если бы кто-томог бы помочь мне.

Ответы [ 5 ]

0 голосов
/ 05 декабря 2018

Суммируйте две таблицы до объединения .Затем join, используя full join, чтобы вы получили все заказы в обеих таблицах:

select coalesce(t1.order_id, t2.order_id) as order_id,  -- include the order_id
       t1_revenue, t1_count,
       shipping_costs
from (select t1.order_id, sum(t1.item_revenue) as t1_revenue, count(*) as t1_count
      from table1 t1
      group by t1.order_id
     ) t1 full join
     (select t2.order_id, t2.shipping_costs as shipping_costs
      from table2 t2
      group by t2.order_id
     ) t2
     on t1.order_id = t2.order_id;

Если ваша база данных не поддерживает full join, тогда используйте left join.Предположительно, заказы в table2 также находятся в table1.

0 голосов
/ 05 декабря 2018
select order_id , count(item_id), sum(item_revenue) , sum(shipping_costs)

из таблицы table1, table2, где table1.orderid = таблица table.order_id по значению order_id

0 голосов
/ 05 декабря 2018

Ваша проблема с псевдонимом и пропущенными запятыми.в GROUP BY вы использовали «order_id», но вам нужно определить поле, связанное с таблицей1 или таблицей2.Также для псевдонима.Не начинайте с цифры, как 1,2.Вы можете получить сообщение об ошибке.

РЕДАКТИРОВАТЬ (Таблица 2 в подзапросе):

Select
    T1.order_id
    ,count(1) ItemCount
    ,sum(item_revenue) ItemRevenue
    ,sum(shipping_costs) ShippingCost
from table1 T1
INNER join (SELECT Order_id
                  ,SUM(shipping_costs) shipping_costs  
            FROM Table2
            GROUP BY Order_id) T2 on T1.order_id = T2.order_id
group by T1.order_id
0 голосов
/ 05 декабря 2018

Надеюсь, это поможет, если вы используете Oracle SQL

select table1.Order_id
sum(table1.item_revenue)
count(table1.item_id)
sum(table2.shipping_costs)
from
(
  select Order_id,Item_Revenue,Item_id, row_number() over (partition by Order_id order by Item_id) as man_id
  from table 1
)
table1
left join
(
  select package_id,Order_id,shipping_costs, row_number() over (partition by Order_id order by package_id) as man_id
  from table 2
)
table2
on table1.order_id = table2.order_id
and table1.man_id = table2.man_id
group by table1.order_id
0 голосов
/ 05 декабря 2018

Я думаю, вам нужно внутреннее соединение

    Select order_id,count( distinct item_id),
    sum(item_revenue),
    sum(shipping_costs)
    from table1
    join table2 on table1.order_id = table2.order_id
    group by order_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...