СОЕДИНИТЕ две таблицы в PostgreSQL и GROUP BY - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующие таблицы в PostgreSQL:

table1:

MARKET        character varying 10
COST1         Number

MARKET       COST1      
A             3         
A             7
B             10 

table2:

MARKET        character varying"    10
COST2         Number

MARKET       COST2      
A             12         
A             13
B             15
B             15

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

MARKET       COST1      COST2
A             10         25
B             10         30

Я выполнил следующий запрос:

select table1."MARKET", sum(table1."COST1"), sum(table2."COST2") 
from table1  inner join table2 on table1."MARKET" = table2."MARKET" GROUP 
BY(table1."MARKET")

Мой ОП следующий.Значения стоимости больше, чем должно быть:

MARKET       COST1      COST2
A             20         50
B             20         50

Что я делаю не так?Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

В качестве альтернативы (вам нужен код, который начинается со строки 13; CTE здесь, чтобы я мог использовать некоторые данные; не обращайте внимания на стильный пример Oracle).

SQL> with table1 (market, cost1) as
  2    (select 'a', 3 from dual union all
  3     select 'a', 7 from dual union all
  4     select 'b', 10 from dual
  5    ),
  6  table2 (market, cost2) as
  7    (select 'a', 12 from dual union all
  8     select 'a', 13 from dual union all
  9     select 'b', 15 from dual union all
 10     select 'b', 15 from dual
 11    )
 12  -- you need what follows:
 13  select x.market, sum(x.cost1) as cost1, sum(y.cost2) as cost2
 14  from (select a.market, sum(a.cost1) cost1
 15        from table1 a
 16        group by a.market) x
 17    join
 18       (select b.market, sum(b.cost2) cost2
 19        from table2 b
 20        group by b.market) y
 21    on x.market = y.market
 22  group by x.market;

M      COST1      COST2
- ---------- ----------
a         10         25
b         10         30

SQL>
0 голосов
/ 06 июня 2018

У агрегации до join.Или используйте union all и group by:

select market, sum(cost1) as cost1, sum(cost2) as cost2
from ((select market, cost1, 0 as cost2
       from table1
      ) union all
      (select market, 0, cost2
       from table2
      )
     ) mc
group by market;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...