Size: a a a

pgsql – PostgreSQL

2021 February 14

РС

Руслан Сайфетдинов... in pgsql – PostgreSQL
На ум приходят "оконные функции" https://postgrespro.ru/docs/postgrespro/9.5/tutorial-window
Типа такого:

select *
from (select field1,
            field2,
            keyField1,
            KeyField2,
                row_number() over (partition by keyField1,keyField2) as rowNum
     from MyTable) as subQuery
where rowNum = 1
источник

В

Влад in pgsql – PostgreSQL
Руслан Сайфетдинов
На ум приходят "оконные функции" https://postgrespro.ru/docs/postgrespro/9.5/tutorial-window
Типа такого:

select *
from (select field1,
            field2,
            keyField1,
            KeyField2,
                row_number() over (partition by keyField1,keyField2) as rowNum
     from MyTable) as subQuery
where rowNum = 1
интересная мысль! спасибо!
источник

S

Se in pgsql – PostgreSQL
Коллеги. нужно объедиинть 2 таблички

msk

date | value
——————--
2010 | 11
2015 | 14

spb

date | value
——————--
2010 | 8
2020 | 12

в итоге хочу получить такое

date | msk.value | spb.value
——————-————————
2010 | 11              | 8
2015 | 14              | пусто
2020 | пусто        |  12


Какой запрос нужно для этого?
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
join. Кажется, outer.
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
group by
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
возможно понадобится "having"
источник

S

Se in pgsql – PostgreSQL
SELECT * from msk FULL OUTER JOIN spb2 ON msk.date=spb2.date;
date | value | date | value
------+-------+------+-------
2010 |    11 | 2010 |     8
2015 |    14 |           |
          |          | 2020 |    12
(3 rows)

похоже. но хочется слить  колонки date в одну, и добавить к value колонкам имя табличек
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Se
SELECT * from msk FULL OUTER JOIN spb2 ON msk.date=spb2.date;
date | value | date | value
------+-------+------+-------
2010 |    11 | 2010 |     8
2015 |    14 |           |
          |          | 2020 |    12
(3 rows)

похоже. но хочется слить  колонки date в одну, и добавить к value колонкам имя табличек
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
group by date, having (чтото у вас null может быть). ну ессно в select адекватные данные, всмысле агрегатные функции
источник

VA

Vladimir Avramov in pgsql – PostgreSQL
Se
Коллеги. нужно объедиинть 2 таблички

msk

date | value
——————--
2010 | 11
2015 | 14

spb

date | value
——————--
2010 | 8
2020 | 12

в итоге хочу получить такое

date | msk.value | spb.value
——————-————————
2010 | 11              | 8
2015 | 14              | пусто
2020 | пусто        |  12


Какой запрос нужно для этого?
Странный результат желаемый, ну вроде так

SELECT m.date_msk, m.value_msk as value_msk, spb.value_spb as value_spb
 FROM MSK m
LEFT JOIN SPB spb ON m.date_msk = spb.date_spb
UNION
SELECT s.DATE_SPB,  m.value_msk as value_spb, s.value_spb as value_msk
 FROM SPB s
LEFT JOIN MSK m ON s.date_spb = m.date_msk;
источник

VG

Viacheslav G in pgsql – PostgreSQL
Подскажите, возможно ли как-то обработать ошибки подключения при работе с FOREIGN TABLE? В данный момент если конечный сервер недоступен запрос просто заканчивается ошибкой. Хотелось бы получить пустой результат
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Viacheslav G
Подскажите, возможно ли как-то обработать ошибки подключения при работе с FOREIGN TABLE? В данный момент если конечный сервер недоступен запрос просто заканчивается ошибкой. Хотелось бы получить пустой результат
Заверните в функцию и обработайте ошибку как угодно.
источник

AD

Alexander Dementyev in pgsql – PostgreSQL
Se
SELECT * from msk FULL OUTER JOIN spb2 ON msk.date=spb2.date;
date | value | date | value
------+-------+------+-------
2010 |    11 | 2010 |     8
2015 |    14 |           |
          |          | 2020 |    12
(3 rows)

похоже. но хочется слить  колонки date в одну, и добавить к value колонкам имя табличек
select isnull(msk.date,spb.date) as date,msk.value as msk_value,spb.value as spb_value from msk full outer join spb on msk.date=spb.date
источник

S

Se in pgsql – PostgreSQL
Alexander Dementyev
select isnull(msk.date,spb.date) as date,msk.value as msk_value,spb.value as spb_value from msk full outer join spb on msk.date=spb.date
test=# select isnull(msk.date,spb.date) as date,msk.value as msk_value,spb.value as spb_value from msk full outer join spb on msk.date=spb.date;
ERROR:  function isnull(integer, integer) does not exist
LINE 1: select isnull(msk.date,spb.date) as date,msk.value as msk_va...
              ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
test=#
источник

S

Se in pgsql – PostgreSQL
без isnull работает. но все равно 2 колонки date
источник

S

Se in pgsql – PostgreSQL
test=# select msk.date,spb.date as date,msk.value as msk_value,spb.value as spb_value from msk full outer join spb on msk.date=spb.date;
date | date | msk_value | spb_value
------+------+-----------+-----------
2010 | 2010 |        11 |         8
2015 |          |        14 |
          | 2020 |           |        12
(3 rows)
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
Vladimir Avramov
Странный результат желаемый, ну вроде так

SELECT m.date_msk, m.value_msk as value_msk, spb.value_spb as value_spb
 FROM MSK m
LEFT JOIN SPB spb ON m.date_msk = spb.date_spb
UNION
SELECT s.DATE_SPB,  m.value_msk as value_spb, s.value_spb as value_msk
 FROM SPB s
LEFT JOIN MSK m ON s.date_spb = m.date_msk;
ну может у них по регионам разделено. шардинг и т.п. база одна?
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
а вообще бы вьюшку делать
источник

AD

Alexander Dementyev in pgsql – PostgreSQL
Se
test=# select msk.date,spb.date as date,msk.value as msk_value,spb.value as spb_value from msk full outer join spb on msk.date=spb.date;
date | date | msk_value | spb_value
------+------+-----------+-----------
2010 | 2010 |        11 |         8
2015 |          |        14 |
          | 2020 |           |        12
(3 rows)
Сорри postgresql не имеет isnull замените на coalesce
источник

S

Se in pgsql – PostgreSQL
Alexander Dementyev
Сорри postgresql не имеет isnull замените на coalesce
👍 работает. спасибо
источник