У меня есть представление для отчетов, которое выглядит примерно так:
SELECT
a.id,
a.value1,
a.value2,
b.value1,
/* (+50 more such columns)*/
FROM a
JOIN b ON (b.id = a.b_id)
JOIN c ON (c.id = b.c_id)
LEFT JOIN d ON (d.id = b.d_id)
LEFT JOIN e ON (e.id = d.e_id)
/* (+10 more inner/left joins) */
Он объединяет довольно много таблиц и возвращает множество столбцов, но индексы на месте и производительность в порядке.
Теперь я хочу добавить еще один столбец к результату, показывая
- значения через запятую
- упорядочено по значению
- из таблицы y
- внешнее соединение через таблицу пересечений x
- если
a.value3 IS NULL
, остальное возьмите a.value3
Для разделения запятых сгруппированных значений я использую Stragg Тома Кайта , может использовать COLLECT
позже.
Псевдокод для SELECT будет выглядеть так:
SELECT xx.id, COALESCE( a.value3, stragg( xx.val ) ) value3
FROM (
SELECT x.id, y.val
FROM x
WHERE x.a_id = a.id
JOIN y ON ( y.id = x.y_id )
ORDER BY y.val ASC
) xx
GROUP BY xx.id
Каков наилучший способ сделать это? Любые советы?