[SQL] MySQL의에서 누적 합계 열 만들기
SQLMySQL의에서 누적 합계 열 만들기
나는 모습이 좋아하는 테이블이 있습니다 :
id count
1 100
2 50
3 10
나는 테이블과 같을 것이다, 그래서 cumulative_sum라는 새 열을 추가하려면 :
id count cumulative_sum
1 100 100
2 50 150
3 10 160
쉽게 할 수있는 MySQL의 업데이트 문이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.성능에 문제가있는 경우, 당신은 MySQL의 변수를 사용할 수 있습니다 :
성능에 문제가있는 경우, 당신은 MySQL의 변수를 사용할 수 있습니다 :
set @csum := 0; update YourTable set cumulative_sum = (@csum := @csum + count) order by id;
또는, cumulative_sum 열을 제거하고 각 쿼리를 계산할 수있다 :
set @csum := 0; select id, count, (@csum := @csum + count) as cumulative_sum from YourTable order by id;
이것은 실행 방법으로 실행 합계를 계산합니다 :)
-
==============================
2.
SELECT t.id, t.count, (SELECT SUM(x.count) FROM TABLE x WHERE x.id <= t.id) AS cumulative_sum FROM TABLE t ORDER BY t.id
SELECT t.id, t.count, @running_total := @running_total + t.count AS cumulative_sum FROM TABLE t JOIN (SELECT @running_total := 0) r ORDER BY t.id
노트 :
주의 사항 :
-
==============================
3.MySQL은 8.0 / MariaDB가 지원 SUM을 윈도 윙 (골) OVER () :
MySQL은 8.0 / MariaDB가 지원 SUM을 윈도 윙 (골) OVER () :
SELECT *, SUM(cnt) OVER(ORDER BY id) AS cumulative_sum FROM tab;
산출:
┌─────┬──────┬────────────────┐ │ id │ cnt │ cumulative_sum │ ├─────┼──────┼────────────────┤ │ 1 │ 100 │ 100 │ │ 2 │ 50 │ 150 │ │ 3 │ 10 │ 160 │ └─────┴──────┴────────────────┘
DB <> 바이올린
-
==============================
4.
UPDATE t SET cumulative_sum = ( SELECT SUM(x.count) FROM t x WHERE x.id <= t.id )
-
==============================
5.
select Id, Count, @total := @total + Count as cumulative_sum from YourTable, (Select @total := 0) as total ;
-
==============================
6.샘플 쿼리
샘플 쿼리
SET @runtot:=0; SELECT q1.d, q1.c, (@runtot := @runtot + q1.c) AS rt FROM (SELECT DAYOFYEAR(date) AS d, COUNT(*) AS c FROM orders WHERE hasPaid > 0 GROUP BY d ORDER BY d) AS q1
-
==============================
7.또한 각 삽입하기 전에 합계를 계산하는 트리거를 만들 수 있습니다
또한 각 삽입하기 전에 합계를 계산하는 트리거를 만들 수 있습니다
delimiter | CREATE TRIGGER calCumluativeSum BEFORE INSERT ON someTable FOR EACH ROW BEGIN SET cumulative_sum = ( SELECT SUM(x.count) FROM someTable x WHERE x.id <= NEW.id ) set NEW.cumulative_sum = cumulative_sum; END; |
나는 이것을 테스트하지 않았습니다
-
==============================
8.TABLENAME에서 cumulative_sum 등 (개수별로 내림차순 순서)을 통해 ID와 카운트 합 (COUNT)를 선택;
TABLENAME에서 cumulative_sum 등 (개수별로 내림차순 순서)을 통해 ID와 카운트 합 (COUNT)를 선택;
나는 카운트 열 합계 집계 함수를 사용 후 이상 절을 사용했다. 그것은 개별적으로 각 행을 요약한다. 첫 번째 행은 제 행 + 50 (100) 될 것이다 (100) 될 것이다. 셋째 행은 100 + 50 + 10 등이다. 그래서 기본적으로 모든 행은 모든 이전의 행과 맨 마지막 하나의 합이 모든 행의 합이다. 이 볼 수있는 방법이 있으므로 ID 미만이거나 그 자체와 동일 여기서 각 행은 양의 합이다.
from https://stackoverflow.com/questions/2563918/create-a-cumulative-sum-column-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는 - UPSERT *하지 * INSERT 또는 REPLACE (0) | 2020.03.08 |
---|---|
[SQL] 외래 키 제약은 사이클 또는 여러 개의 캐스케이드 경로의 원인? (0) | 2020.03.08 |
[SQL] SQL - 다른 존재하지 않는 하나 개의 테이블에서 찾기 기록 (0) | 2020.03.08 |
[SQL] 당신은 FROM 절에 업데이트를 목표 테이블을 지정할 수 없습니다 (0) | 2020.03.08 |
[SQL] SQL은 가입 : 사용 ON 또는 WHERE 사이에 차이가? (0) | 2020.03.08 |