Обновить сумму столбца Группировать по - PullRequest
3 голосов
/ 12 августа 2011
UPDATE table_name SET col3 = SUM(col2) GROUP BY col1

выдает ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'GROUP BY col1'

Как это решить?

Col1  | col2  |   col3
Water |   22  |
water |   3   |
water |   5   |
Air   |  10   |
Earth |  3    |
Air   |  5    | 

I want in col3 the results as follows

Col1  | col2  |   col3
Water |   22  |   30
water |   3   |   30
water |   5   |   30
Air   |  10   |   15
Earth |  3    |   3
Air   |  5    |   5

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

подзапрос

UPDATE table_name SET col3 = (SELECT SUM(x.col2) FROM (SELECT * FROM table_name) AS x WHERE x.col1 =  table_name.col1)

это сделает подзапрос для каждой обновленной строки, получая сумму col2 для каждой строки, которая соответствует col1

вопрос в том, зачем вам это делать? Вы всегда можете просто использовать SUM, чтобы получить эту информацию, если это необходимо.

1 голос
/ 19 февраля 2017

Вы можете написать запрос как:

UPDATE test_table t1
INNER JOIN (
                SELECT col1, SUM(col2) AS sum_col2 FROM test_table GROUP BY col1
           ) t2
ON  t1.col1  =  t2.col1
SET t1.col3  =  t2.sum_col2;

Рабочая демонстрация

0 голосов
/ 12 августа 2011
UPDATE table_name SET col3 = (Select SUM(col2) From table_name where col1=col1)
...