Строка суммы с тем же идентификатором (mysql) - PullRequest
0 голосов
/ 14 декабря 2011

(последнее) Я хотел бы суммировать строку с тем же user_id (для столбца ponderation мне не нужно иметь другой столбец, только user_id и ponderation)

enter image description here

Мой запрос

SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as ponderation
from (
select sum(exam.ponderation)  as totalpond from scores
left join exam on exam.id = scores.exam_id
left join teacher_group on teacher_group.id = exam.teacher_group_id
left join groups on  groups.id = teacher_group.group_school_id
left join students_group on students_group.user_id = scores.user_id
where teacher_group.id = 54
group by students_group.user_id

 ) as totpond,scores
left join exam on exam.id = scores.exam_id
left join teacher_group on teacher_group.id = exam.teacher_group_id
left join groups on  groups.id = teacher_group.group_school_id
left join students_group on students_group.user_id = scores.user_id

where teacher_group.id = 54
group by scores.id
order by students_group.user_id

Возможно ли это сделать с помощью моего запроса или нужно использовать php? Может кто-то помочь мне, пожалуйста ? спасибо:)

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Не обязательно, вам просто нужно добавить суммирование этого поля в запросе:

 SELECT 
       tmp.user_id,
       SUM(tmp.ponderation) as total_ponderation,
       SUM(tmp.aggregate_ponderation) as ponderation
    FROM
    (
    SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as aggregate_ponderation
    from (
    select sum(exam.ponderation)  as totalpond from scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id
    where teacher_group.id = 54
    group by students_group.user_id

     ) as totpond,scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id

    where teacher_group.id = 54
    group by scores.id
    ) tmp
    GROUP BY
      tmp.user_id
1 голос
/ 14 декабря 2011

Вы можете использовать текущий запрос в качестве подзапроса и агрегировать результаты, полученные следующим образом:

 SELECT 
       tmp.user_id,
       SUM(tmp.aggregate_ponderation) as ponderation
    FROM
    (
    SELECT  students_group.user_id,scores.result ,exam.name,exam.ponderation,exam.id, (scores.result * exam.ponderation) / totpond.totalpond as aggregate_ponderation
    from (
    select sum(exam.ponderation)  as totalpond from scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id
    where teacher_group.id = 54
    group by students_group.user_id

     ) as totpond,scores
    left join exam on exam.id = scores.exam_id
    left join teacher_group on teacher_group.id = exam.teacher_group_id
    left join groups on  groups.id = teacher_group.group_school_id
    left join students_group on students_group.user_id = scores.user_id

    where teacher_group.id = 54
    group by scores.id
    ) tmp
    GROUP BY
      tmp.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...