Не удается заставить SUM работать в MySQL - PullRequest
0 голосов
/ 10 августа 2011

Мне нужно это

  GROUP_ID     TOTALSUM       
     1          67,40000000
     2          56,5454

С этим запросом

 select 
     exam.id, exam.ponderation / totalponderation *  avg(scores.result) as totalsum
 from 
    scores, exam,
    (SELECT SUM(ponderation) AS totalponderation
     FROM exam) AS sumponderation
 where 
     exam.group_id in (91, 93) and exam.id = scores.exam_id
 group by 
     exam.name

Я пробовал много запросов, но ничего не работает.

Запрос № 1 (не работает) (query error)

select sum(exam.ponderation / totalponderation *  avg(scores.result)) as totalsum

Запрос № 2 (не работает) (возвращает 251 as total)

 select sum( exam.ponderation / totalponderation *  avgscores )
 from scores, exam,
      (SELECT SUM(ponderation) AS totalponderation
       FROM exam) AS sumponderation,
      (SELECT avg(scores.result) AS avgscores
       FROM scores, exam
       where exam.group_id in(91,93)  and exam.id = scores.exam_id) AS avgponderation

Итак ... Вкл. Могу ли я сделать сумму моего столбца?

EDIT

Мой экзаменационный стол

Идентификатор ---- имя ----- весомость ---- group_id --- subject_id ---- дата-
1 ------ test1 ---------- 150 ---------- 4 ------------ 4 ------- ------ 2011-11-11
2 ------ test2 ---------- 20 ---------- 4 ------------ 4 ------- ------ 2011-11-11
3 ------- test3 --------- 20 --------- 3 -------------- 4 ------ ------- 2011-11-11

Моя таблица результатов

id ---- exam_id ----- user_id ---- subject_id результат ------------- дата ------ заказ
1 ------ 1 ------------ 5 ------------- 4 ------------ 80-- ----------- 2011-11-11 ------- 1
2 ------ 2 ------------ 25 ------------- 4 ------------ 30-- ----------- 2011-11-11 ------ 0
3 ------ 1 ------------ 5 ------------- 4 ------------ 61-- ----------- 2011-11-11 ------- 1
4 ------ 2 ------------ 25 ------------- 4 ------------ 80-- ----------- 2011-11-11 ------ 0

edit: мне нужно сгруппировать BY group_id

  GROUP_ID     TOTALSUM       
         1          67,40000000
         2          56,5454

Thx

1 Ответ

2 голосов
/ 10 августа 2011

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

SELECT 
e.group_id,
   SUM(e.ponderation /  totalponderation *  avgscores)  TOTAL_sum

FROM 
    exam e

    INNER JOIN (SELECT exam_id, avg(scores.result) avgscores 
         FROM scores
      GROUP BY exam_id) a
    ON e.id = a.exam_id,
    (SELECT SUM(ponderation) AS totalponderation
      FROM exam) AS sumponderation
Group by 
   e.group_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...