выберите СУММУ столбца с получением количества других столбцов - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть таблица типа

student_id  student_name    subject marks
1              A            a_sub   10
1              A            a_sub   10
2              A            b_sub   5
3              A            c_sub   20
4              B            b_sub   10

, из которой я хочу получить SUM(marks) со всеми другими столбцами, например, SELECT student_name, subject, SUM(marks) AS marks FROM records ORDER BY student_id.

Результат должен быть таким:

student_name    subject marks
A               a_sub   45
B               b_sub   10

Я пытался с GROUP BY, но он не будет работать, поскольку student_name имеет другое значение subject

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Вы можете получить свой вывод, используя этот запрос

select distinct b.student_name, b.marks, (select top 1 subject from [records] where b.student_name = student_name)
from [records] a
inner join (
        SELECT student_name, SUM(marks) AS marks 
        FROM [records] 
        GROUP BY student_name) b on a.student_name = b.student_name
ORDER BY b.student_name

Я также попробовал на моем конце, он работает нормально

1 голос
/ 28 февраля 2020

Если вы просто хотите «первый» предмет, вы можете использовать min() и группировать по имени.

SELECT student_name, min(subject) as subject, SUM(marks) AS marks 
FROM records 
GROUP BY student_name
ORDER BY student_name;
0 голосов
/ 28 февраля 2020

Вы можете использовать оконную функцию:

select distinct r.student_name, 
       first_value(r.subject) over (partition by r.student_name order by r.student_id) as subject,
       sum(r.marks) oever (partition by r.student_name) as marks
from records r;

Простое агрегирование также будет работать:

select student_name, min(subject) as subject, sum(marks) as marks 
from records r 
group by student_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...