, так как у меня нет последней версии Postgresql (у меня есть Postgresql 9.3), я не смог придумать функцию, аналогичную функции pivot, которая вычисляет общее значение частичного поля.
Вы можете щелкнуть ссылку ниже, чтобы использовать вопрос, который я создал в качестве ссылки, они похожи по коду, но отличаются в аспекте требований, но есть второй запрос, который использует массив и также дает точно такие же результаты.
Как создавать столбцы для разных полей без применения функции поворота
В настоящее время я получаю следующие результаты
Я хочу эти результаты
Ниже у меня естьзапрос , который возвращает мне языки, на которых говорят студенты, в 3 разных столбцах ... Моя проблема в том, что я не могу найти решение, которое может вернуть мне сумму, сколько студентов говорят на 1 языке1, сколько говорят на языке2сколько людей говорят на языке3
with t as (
SELECT s.studentnumber as studentnr, p.firstname AS name,
sl.gradenumber as gradenumber, l.text as language,
dense_rank() over (partition by s.studentnumber,
p.firstname, sl.gradenumber order by l.text) as seqnum
FROM student s JOIN
pupil p
ON p.id = s.pupilid JOIN
pupillanguage pl
ON pl.pupilid = p.id JOIN
language l
ON l.id = pl.languageid JOIN
schoollevel sl
ON sl.id = p.schoollevelid
)
select studentnr, name, gradenumber,
max(case when seqnum = 1 then language end) as language_1,
max(case when seqnum = 2 then language end) as language_2,
max(case when seqnum = 3 then language end) as language_3
from t
group by studentnr, name, gradenumber;
Я задаю этот вопрос, потому что, если нет способа сделать это, мне не нужно вдаваться в подробности, если это невозможно.
Вся эта концепция разделения и диплэнка является относительно новой для меня, и я не уверен в их масштабах и возможностях для получения дальнейших результатов.