Создайте два массива для двух полей, сохраняя порядок сортировки массивов в синхронизации (без подзапроса)
Для этого вопроса нет ни рифмы, ни причины, кроме того, что мне было любопытно, как можно поступить так.
Платформа: В то время как я надеялся на решение SQL-Standard, моя основная концентрацияPostgreSQL 8.4+, (Я знаю, 9.0+ имеет некоторые функции сортировки массивов.)
SELECT id, group, dt
FROM foo
ORDER BY id;
id | group | dt
-------+-------+-----------
1 | foo | 2012-01-01
1 | bar | 2012-01-03
1 | baz | 2012-01-02
2 | foo | 2012-01-01
3 | bar | 2012-01-01
4 | bar | 2012-01-01
4 | baz | 2012-01-01
Я знаю, что следующий запрос неверен, но результат аналогичен тому, что я получаю; способ связать два поля (сортировкаgroup
также следует отсортироватьdt
):
SELECT id, sort_array(array_agg(group)), array_agg(dt)
FROM foo
GROUP BY id;
id | group | dt
-------+----------------+------------------------------------
1 | {bar,baz,foo} | {2012-01-03,2012-01-02,2012-01-01}
2 | {foo} | {2012-01-01}
3 | {bar} | {2012-01-01}
4 | {bar,baz} | {2012-01-01,2012-01-01}
Есть ли простой способ связать поля для сортировки без использования подзапроса? Может быть, построить массив массивов, а затем unnest?