2015-12-09 2 views
0

Я хочу сделать некоторые расчеты для столбца total , добавив две метки столбцов для конкретного std_id.MYSQL UPDATE TABLE ОШИБКИ

Например 30+25=55, всего = 55 для std_id 32

+--------+-----------+-------+----+----------------+-------+  
| std_id | course_id | marks | mp | subject  | total |  
+--------+-----------+-------+----+----------------+-------+  
|  32 |  40 | 30.00 | 22 | Elective Maths |  0 |  
|  32 |  40 | 25.00 | 12 | Elective Maths |  0 |  
|  39 |  40 | 30.00 | 22 | Elective Maths |  0 |  
|  39 |  40 | 20.00 | 12 | Elective Maths |  0 | 
+--------+-----------+-------+----+----------------+-------+ 

Я пытался что-то вроде

update student_reports 
set total= sum(marks) 
where std_id=std_id; 

, но не работает, любая помощь очень ценится, особенно тот, который делает не требуется изменять структуру стола

44445 +16410617451515053691368888

В первой таблице выше, с помощью одного course_id, код по GILEYS вычисленной общее идеально

Update student_reports г, ( выберите std_id, сумма (знаков) в качестве общей от student_reports группы по std_id ) t set r.total = t.tot где r.std_id = t.std_id;

Мой следующий вопрос, что если я добавить еще одно значение course_id, чтобы сделать его (40,43) к столу, как я могу сделать новые итоги

+ --- ----- + ----------- + ------- + ---- + ---------------- + - ----- +

| std_id | course_id | знаки | mp | предмет | всего |

+ -------- + ----------- + ------- + ---- + ----------- ----- + ------- +

| 32 | 40 | 30,00 | 22 | Избирательная математика | 0 |

| 32 | 40 | 25.00 | 12 | Избирательная математика | 0 |

| 39 | 40 | 30,00 | 22 | Избирательная математика | 0 |

| 39 | 40 | 20.00 | 12 | Избирательная математика | 0 |

| 32 | 43 | 40,00 | 22 | Core Maths | 0 |

| 32 | 43 | 20.00 | 12 | Core Maths | 0 |

| 39 | 43 | 45,00 | 22 | Core Maths | 0 |

| 39 | 43 | 40.00 | 12 | Core Maths | 0 |

+ -------- + ----------- + ------- + ---- + ----------- ----- + ------- +

Я пытался что-то вроде

обновление student_reports г (выберите std_id, course_id, предмет, сумма (Marks) в общей сложности из группы student_reports by std_id) t set r.total = t.tot где r.std_id = t.std_id И r.course_id = t.course_id И r.subject = t.subject;

но не дает подведения итогов, как я бы эксперт, пожалуйста, нужна ваша помощь снова

для достижения желаемых результатов ниже

+ -------- + - --------- + ------- + ---- + ---------------- + ------- +

| std_id | course_id | знаки | mp | предмет | всего |

+ -------- + ----------- + ------- + ---- + ----------- ----- + ------- +

| 32 | 40 | 30,00 | 22 | Избирательная математика | 55 |

| 32 | 40 | 25.00 | 12 | Избирательная математика | 55 |

| 39 | 40 | 30,00 | 22 | Избирательная математика | 50 |

| 39 | 40 | 20.00 | 12 | Избирательная математика | 50 |

| 32 | 43 | 40,00 | 22 | Core Maths | 60 |

| 32 | 43 | 20.00 | 12 | Core Maths | 60 |

| 39 | 43 | 45,00 | 22 | Core Maths | 95 |

| 39 | 43 | 40,00 | 12 | Core Maths | 95 |

+ -------- + ----------- + ------- + ---- + ----------- ----- + ------- +

+0

Вы хотите обновить любую запись в таблице или просто получить итоговые оценки любого учащегося? – sahil

+0

может быть дубликат http: // stackoverflow.com/questions/653826/update-with-sum-in-mysql (но как вы хотите только для одного ID, он может работать с подзапросом) – Blag

+0

@ Gmiley есть код, который будет делать обновление? – cammpopp

ответ

0

Попробуйте это:

update student_reports 
set total = (
    select sum(marks) 
    from student_reports 
    where std_id = 32 
) 
where std_id = 32; 

Или, если вы хотите всю таблицу обновление:

update student_reports 
    set total = t.total 
    from (
     select std_id, sum(marks) as total 
     from student_reports 
     group by std_id 
    ) t 
    where t.std_id = student_reports.std_id; 

Edit, выше, не может работы над MySQL, вы можете попробовать следующее:

update student_reports r, (
    select std_id, sum(marks) as total 
    from student_reports 
    group by std_id 
) t 
set r.total = t.total 
where r.std_id = t.std_id; 
+0

Я использовал ваш код следующим образом, надеюсь, что его правильный ** update student_reports set total = t.total from (выберите std_id, sum (marks) как total from student_reports group by std_id) t где t.std_id = student_reports.std_id; ** но имела ошибку следующим образом ** ERROR 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'from (выберите std_id, sum (marks) как total from student_reports' в строке 1 ** – cammpopp

+0

Обновленный ответ. Тот, который вы пробовали, может быть несовместим с mysql, попробуйте последний. – gmiley

+0

Спасибо, что так много GMILEY, ваш последний код работал как шарм. Вступите в контакт, если появятся новые разработки, Больше «смажьте локоть». – cammpopp

0

Наличие столбца «total» может вызвать горе, потому что оно станет неправильным, как только будут вставлены новые данные для данного идентификатора. Этот запрос даст вам тот же результат без необходимости запуска обновления каждый раз, когда вы получите новые данные. Если вам нужно, чтобы он играл как стол, вы можете посмотреть в creating a view.

SELECT t.std_id, t.course_id, t.marks, t.mp, t.subject, c.total 
FROM student_reports AS t 
JOIN (SELECT std_id, SUM(marks) AS total 
     FROM student_reports 
     GROUP BY std_id) AS c ON c.std_id = t.std_id 
+0

Ваш код работает, но не обновляет значения в столбце «total». Большое спасибо за ваш h elp, свяжутся, когда появятся новые разработки. – cammpopp

+0

. Мой следующий вопрос: что, если я добавлю другое значение course_id, чтобы сделать его (40,43) в таблице, как я могу сделать новые итоги? – cammpopp

+0

Это было как раз то, пытаясь сделать. Если у вас есть итоговый столбец, это будет неправильно при добавлении данных. С запросом (или представлением) он всегда корректен с момента запуска запроса. – Andrew