У меня есть продолжение к this question, в котором я сгенерировал массивы этого типа таблицы:Создание уникальных комбинаций в Postgres размером два из массива
val | fkey | num
------------------
1 | 1 | 10
1 | 2 | 9
1 | 3 | 8
2 | 3 | 1
В котором в результате возвращается строка хотел бы что-то вроде этого (были в основном функциональных кнопок объединить в один список):
1 | [1,2,3]
То, что я хотел бы сделать, это изменить запрос с соответствующими по значению в колонке «NUM». То есть мне хотелось бы что-то вроде:
1 | [1,2] | [10, 9]
1 | [1,3] | [10, 8]
1 | [2,3] | [9, 8]
Заказ третьего столбца в запросе на возврат не беспокоит меня. Сейчас у меня есть что-то вроде этого:
SELECT val, array_agg(fkey), array_agg(num)
FROM mytable
GROUP BY val
Having Count(fkey) > 1
Но что возвращает что-то подобное:
1 | [1,2,3] | [10, 9, 8]
Какой бы хорошо, за исключением того, что я не могу легко сказать, какое число в третьем массиве происходит от чего fkey (если это имеет смысл). Что-то, как это будет работать, чтобы следить за ним:
1 | [1,2,3] | [10 - 1, 9 - 2, 8 - 3]
Я не уверен, что лучший способ идти об этом есть, но я открыт для предложений.
EDIT: Я нахожусь в Postgres 9.3.6. Определение таблицы:
awesome-db=# \d mytable
Table "public.mytable"
Column | Type | Modifiers
----------+---------+-----------
val | bytea | not null
fkey | uuid | not null
num | integer | not null
Indexes:
"comp_key" UNIQUE CONSTRAINT, btree (fkey, num, val)
"fingerprint_index" btree (val)
Два вызова 'array_agg()' в одном и том же списке SELECT принимают элементы в том же порядке, если не указано иначе с 'ORDER BY', добавленным к параметрам функции. Таким образом, вы можете * указать, какие элементы двух массивов идут вместе, и ваша текущая функция должна выполнять эту работу. Что мне не хватает? –
Как правило, такой вопрос требует, чтобы вы указали определение таблицы ('\ d mytable' в psql) и вашу версию Postgres. –
Это * много * лучше скопировать/вставить то, что вы получаете от '\ d mytable' в psql. Иначе мы не можем быть уверены в полной картине. Например, я до сих пор не знаю, определены ли ваши столбцы 'NOT NULL'. –