@IlyaPrivolnov333

Как добавить в пустой столбец таблицы сумму из другой таблицы по заданному условию?

Предположим, у меня есть следующая таблица:

column_1 | column_2 | column_3
__________ |___________ |__________
1 | 12 |
1 | 32 |
2 | 10 |
2 | 5 |
3 | 6 |
3 | 10 |

Подскажите пожалуйста, какую функцию необходимо написать, чтобы в column_3 подсчитывалась сумма из column_2 учитывая группировку с column_1? В конечном итоге должна получиться следующая таблица:

column_1 | column_2 | column_3
__________ |___________ |__________
1 | 12 | 44
1 | 32 | 44
2 | 10 | 15
2 | 5 | 15
3 | 6 | 16
3 | 10 | 16
  • Вопрос задан
  • 382 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Akela_wolf
Extreme Programmer
Автоматически обновлять таблицу - это нужен триггер.

Можно сделать представление (VIEW) и тогда, при запросе данных из этого представления, каждый раз будет автоматически подсчитываться нужная вам сумма.

create table tbl (
        сol1 int,
  	col2 int
);

insert into tbl (col1, col2) values (1, 12), (1, 32), (2, 10), (2, 5), (3, 6), (3, 10);

CREATE VIEW tbl_sum AS SELECT tbl.*, SUM(tbl.col2) OVER (PARTITION BY tbl.col1) AS col3 FROM tbl;

SELECT * FROM tbl_sum;


https://sqlize.online/sql/mysql80/5b3c3e5b21a1083d...
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
update tbl
join (
	select col1, sum(col2) col2_sum from tbl group by col1
) summed on summed.col1 = tbl.col1
set col3 = col2_sum;


MySQL online query
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
Подскажите пожалуйста, какую функцию необходимо написать, чтобы в column_3 подсчитывалась сумма из column_2 учитывая группировку с column_1?

Прежде чем спрашивать "как", обоснуйте, зачем это делать.

Хранение агрегированной суммы в таблице - это называется "переопределённые данные". Что (1) практически никогда не нужно (2) зачастую просто вредно. Правильно - считать требуемое значение из исходных данных в тот момент, когда оно реально нужно.

Хранение переопределённых данных - это просто хранение лишнего. Но это не единственная опасность. Любая нештатная ситуация - и значение запросто может не обновиться, либо неверно обновиться. Итогом станет хранение в таблице неправильных значений. И что самое противное - эта неправильность ну никак не детектируется. Пока наконец использование неверного значения не аукнется где-то в другом месте, с фейерверком и воплями, а то и с увольнением программиста, допустившего такой архитектурный косяк.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы