Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Задача с полем типа массив / 7 сообщений из 7, страница 1 из 1
07.03.2016, 21:01
    #39187315
Бока
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
Есть такая таблица:
Код: plsql
1.
2.
3.
CREATE TABLE "public"."test" (
"key1" int4 DEFAULT nextval('test_key1_seq'::regclass) NOT NULL,
"reach_pois" int4[]);


В ней следующие записи:
Код: plsql
1.
select * from test LIMIT 10;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
1	{110586}
2	{110586}
3	{110586}
4	{126493,126489,47886,47888,49456,49436,49438,49440,44489,44487,46145,46156,46160,46148,46160,46156,46145,44487,44489,49440,49438,49436,49456,47888,47886,126489,126493}
5	{}
6	{127153,46483,127153,46483,127153,46483,127153,127151,127158,127157,127162,128518,128519,127160,127167,127165,46492,46491,48239,43954,43957,45516,45518,45515,43955,43953,43949,43947,48207,48209,48213,48214,46486,46487,46480,127152,127154,128545,123860,123887,125464,133631,133632,135201,135209,129226,129230,130882,130883,114578,115853,115851,111543,113124,121111,122638,122640,117582,119219,119215,102583,102604,100932,100934,100940,99317,99315,100679,100672,100670,99118,99119,109384,109389,107813,106394,106388,104792,104790,104785,90390,90388,90396,88358,88357,87095,87096,87098,85559,85556,96641,96638,95082,93229,91847,91861,429228,427156,425797,424029,424031,436895,436896,435068,435067,433049,433031,431037,443288,441113,441110,441107,439473,437659,450405,451307,451308,449499,448024,448023,445941,455647,457564,452040,454152,462971,462977,462972,462974,462968,462970,454103,454098,454099,454108,454109,454105,452062,452064,452065,452064,452062,454105,454109,454108,454099,454098,454103,462970,462968,462974,462972,462977,462975,462987,462991,454149,454142,454143,452046,452045,457572,457571,457569,455711,455710,455709,445939,445940,448033,448037,448039,449546,449549,451318,451319,451316,450388,450387,437520,437529,437526,439461,439465,439464,441055,441049,443241,443243,431005,431003,432812,435088,435090,436872,423992,424004,425767,425766,427392,427395,429126,429123,427394,429123,429126,427395,427392,425766,425767,424004,423992,436872,435090,435088,435085,435081,435093,435092,436877,436881,436880,423990,423994,423993}
7	{123879}
8	{123879}
9	{123879}
10	{126493,126489,47886,47888,49456,49436,49438,49440,44489,44487,46145,46156,46160,46148,40973,46148,46160,46156,46145,44487,44489,49440,49438,49436,49456,47888,47886,126489,126493}

Нужно сделать запрос, который для всех записей таблицы, в которых количество элементов массива > 1, выводил бы количество уникальных для всей таблицы пар соседей.
На примере последней, приведённой выше строки с массивом элементов, пары соседей - это:
- 126493,126489;
- 126489,47886;
- 47886,47888;
- 47888,49456;
- и т.д., т.е. каждый второй элемент в очередной паре соседей является первым элементом в следующей паре соседей.
...
Рейтинг: 0 / 0
09.03.2016, 17:56
    #39188480
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  distinct (arstr ||  ',' || lead(arstr) OVER (PARTITION BY key1)) as item
FROM (
  SELECT
    key1, unnest(reach_pois) arstr
  FROM test
  WHERE ARRAY_LENGTH(reach_pois, 1) > 1
) z;
...
Рейтинг: 0 / 0
14.03.2016, 19:06
    #39191701
Бока
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
SharuPoNemnogu,

спасибо
...
Рейтинг: 0 / 0
15.03.2016, 10:56
    #39191992
Бока
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
SharuPoNemnogu,

А не выпадает ли в Вашем запросе самый первый элемент json массива из следующей записи ? Ведь функция "lead" действует (насколько я понимаю) только в рамках unnest-а по каждому значению "key1" ?
...
Рейтинг: 0 / 0
15.03.2016, 12:12
    #39192123
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
Бока,

ничего там не должно выпадать, проверьте на паре записей, посмотрите что выводит. На демо данных все норм отработало. Единственное null выбирается, т.к. lead на последнем элементе выведет null
...
Рейтинг: 0 / 0
15.03.2016, 16:01
    #39192467
Бока
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
SharuPoNemnogu,

Я проверил на одной маленькой таблице из 20 записей - все нормально. Но в этой таблице у меня нет записей, в которых бы пары повторялись бы из записи в запись, повторение только в внутри одной записи. А в реале парыц могут повторяться в разных записях.

Учитывает ли это Ваш запрос ?
...
Рейтинг: 0 / 0
15.03.2016, 16:10
    #39192485
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача с полем типа массив
Бока,

ну добавьте повторяющиеся записи, да проверьте. там же distinct стоит
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Задача с полем типа массив / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]