Мне нужно написать запрос, который возвращает как агрегированные, так и неагрегированные данные из таблицы.
Пример, приведенный ниже, должен помочь уточнить, что я пытаюсь сделать. У меня есть следующие (упрощенные) таблицы ниже:
CREATE TABLE course_group_def (
id PRIMARY SERIAL KEY,
name TEXT NOT NULL
);
CREATE TABLE student (
id PRIMARY SERIAL KEY,
grp_id INTEGER REFERENCES course_group_def(id) ON UPDATE CASCADE,
name TEXT NOT NULL,
weight float NOT NULL,
height float NOT NULL
);
Ради аргумента давайте предположим, что каждый студент принадлежит к одной и той же группе курсов. Я хочу написать запрос, который будет возвращать набор результатов следующим образом:
имя студента, вес студента, вес_папки, вес_апг
Где:
weight_apgaw: - это вес отдельного студента, выраженный в процентах от среднего веса группы курса, к которой он / она принадлежит.
weight_apgh:
это вес отдельного студента, выраженный в процентах от среднего роста группы курса, к которой он / она принадлежит
У меня НЕТ идеи (ну, есть идея) о том, как написать такой запрос. Мой подход состоит в том, чтобы написать два запроса и каким-то образом выполнить поиск между двумя таблицами, но такой подход в лучшем случае кажется бессмысленным и неэффективным.
Может, кто-нибудь подскажет, как правильно написать такую функцию SQL? В идеале, это должно быть независимым от БД. Однако я использую PostgreSQL 8.4, поэтому, если мне нужно выбирать между разновидностями SQL, это имеет приоритет.