Добрый день!
Вопрос такой можно ли сделать такой запрос как можно проще, минимизируя вложенные.
Имеется таблица, скажем студентов.
Иванов - математика - 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
https://habrahabr.ru/post/162893/