Строки в колонки.

Добрый день!
Вопрос такой можно ли сделать такой запрос как можно проще, минимизируя вложенные.
Имеется таблица, скажем студентов.
Иванов - математика - 5
Иванов - физика - 4
Петров - физика - 3
Петров - история - 3
Сидоров - математика - 4
Иванов - история - 3
Петров - философия -3
и т.д.
В реальной таблице, разумеется студенты, предметы, имеют уникальные ID и т.д.
записей там десятки тысяч, если не сотни, предметов тоже прилично

Нужно получить

студент математика физика история философия
Иванов 5 4 3
Петров 3 3 3
Сидоров 4

Я сделал подзапросы по каждому предмету, как таблицы, потом соединил их общим запросом, по студентам. Но на каком-то этапе выполнение стало резко тормозить.
Скажем 8 предметов - запрос был 1,5 секунды максимум, при добавлении 9-го 1,5 минуты.

Вот и встал вопрос - можно ли сделать все оптимальнее?

Спасибо за советы.
Помогло решение, заменить стыковки, простым сравнением таблиц, JOIN-ном. Одно лишнее сравнение и время запроса вырастает в десятки раз.
Правда, дальнейшая оптимизация не сильно ускорила запрос. Но и так он выполняется за пару секунд, что нормально.

Pivot - интересное решение, но не то что не разобрался. Работаю с промышленной базой, которую перенастраивать нельзя, только делаю запросы на чтение, ну возможно свои таблицы для временного хранения. А в установленном PostrgreSQL нет ни Python, ни еще некоторых добавок. Так что не получилось.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Вам не нужны подзапросы, вам

Вам не нужны подзапросы, вам нужно освоить оператор JOIN.
http://postgresql.ru.net/manual/queries-table-expressions.html#QUERIES-FROM

https://habrahabr.ru/post/162

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023