LINUX.ORG.RU

Возможно ли в один запрос...

 


0

2

Есть таблица с направлениями и телефонными кодами вида:

billing=> select * from directions where id = 1075;
  id  |            direction            | code | min_len | max_len | int_code 
------+---------------------------------+------+---------+---------+----------
 1075 | United Kingdom Special Services | 4450 |      12 |      12 |     4450
 1075 | United Kingdom Special Services | 448  |      12 |      12 |      448
 1075 | United Kingdom Special Services | 4455 |      12 |      12 |     4455
 1075 | United Kingdom Special Services | 449  |      12 |      12 |      449
 1075 | United Kingdom Special Services | 4456 |      12 |      12 |     4456
 1076 | United Kingdom Freephone | 44800 |      10 |      14 |    44800
 1076 | United Kingdom Freephone | 44808 |      10 |      14 |    44808


Задача: получить список вида «id - direction - code (все с этим id)»
Как бы distinct on direction, но он, естественно, оставляет только первый code.

Вопрос: возможно ли одним запросом?

★★★★☆

Т.е. нужно что-то типа id|direction|list-of-codes (по одной записи на id/direction и в поле list-of-codes какой-то список)?

AlexKiriukha ★★★★
()

select id, direction, code from directions where id =1075?

Kazun3500
()
> create table x (id bigint, val bigint);
> insert into x (id, val) values (1, 2000);
> insert into x (id, val) values (1, 2001);
> insert into x (id, val) values (1, 2002);
> insert into x (id, val) values (2, 3000);
> select id, array_agg(val) from x group by id order by id;
 id |    array_agg     
----+------------------
  1 | {2000,2001,2002}
  2 | {3000}
quester ★★
()

Я не понял что тебе нужно, почему у тебя в примере с where id = 1075 отдаются строки с 1076 и чем тебе то что есть не «список вида «id - direction - code (все с этим id)»».

Нужно убрать дубликаты?

select distinct id, direction, code from directions

Все коды для id/direction в одну строку?

select id, direction, array_agg(distict code) from directions group by id, direction

slovazap ★★★★★
()
Ответ на: комментарий от quester

Отлично, спасибо.
А можно ли такое же проделать с заджойненной табличкой?

К примеру,

select x.id, array_agg(y.val) from x inner join y on x.id == y.id

annerleen ★★★★☆
() автор топика
Последнее исправление: annerleen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.