Нужна помощь в создании запроса PostgreSQL - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть следующая таблица.

Name count1 Name2 count2
A    1      B     2
B    2      c     4 
A    5      C     7

Имя имеет значения count1, а Имя2 имеет значения count2.

Мне нужен следующий результат

a -> 6   col[0][0] + c[2][0]
b-> 4    col[0][3] + c[1][1]
c -> 11  col[1][3] + col[2][3]

Объяснение: B поставляется как с именем, так и с именем1, поэтому нам нужно добавить и count1, и count2 для B

1 Ответ

0 голосов
/ 24 апреля 2018

Вам необходимо отключить данные и затем агрегировать. Вот простой метод:

select name, sum(cnt)
from ((select name1 as name, count1 as cnt from t) union all
      (select name2, count2 from t)
     ) t
group by name;

Более поздние версии Postgres поддерживают боковые объединения. Они могут быть более эффективными, когда у вас большой объем данных, но union all также отлично работает.

EDIT:

Боковое соединение очень похоже:

select v.name, sum(v.cnt)
from t, lateral join
     (values (t.name1, t.count1), (t.name2, t.count2)) v(name, cnt)
group by v.name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...