MySQL 이 window 함수 에 sum 함 수 를 실행 하면 나타 날 수 있 는 Bug
환경 설정:
문제 설명
데이터:한 성적표 에 세 개의 필드 가 있 습 니 다:학생 sid,수업 cid,성적 sscore。
조회 조건 은 각 과정의 학생 성적 순위 와 성적 을 합산 한다.
조회 결과:같은 과정 에서 같은 성적 을 얻 으 면 종합 성적 은 누적 이 아니 라 한 번 에 모두 추가 하 는 것 으로 나 타 났 다.
데이터 시트 만 들 기
CREATE TABLE `Score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
)
데이터 삽입
--
insert into Score values('01' , '01' , 80);
insert into Score values('01' , '02' , 90);
insert into Score values('01' , '03' , 99);
insert into Score values('02' , '01' , 70);
insert into Score values('02' , '02' , 60);
insert into Score values('02' , '03' , 80);
insert into Score values('03' , '01' , 80);
insert into Score values('03' , '02' , 80);
insert into Score values('03' , '03' , 80);
insert into Score values('04' , '01' , 50);
insert into Score values('04' , '02' , 30);
insert into Score values('04' , '03' , 20);
insert into Score values('05' , '01' , 76);
insert into Score values('05' , '02' , 87);
insert into Score values('06' , '01' , 31);
insert into Score values('06' , '03' , 34);
insert into Score values('07' , '02' , 89);
insert into Score values('07' , '03' , 98);
조회 데이터
select c_id,s_id,s_score,
first_value(s_score) over w as first_v,
last_value(s_score) over w as last_v,
sum(s_score) over w as sum_v,
max(s_score) over w as max_v,
min(s_score) over w as min_v,
count(s_id) over w as count_v,
row_number() over w as row_id,
rank() over w as rank_id,
dense_rank() over w as dense_id
from score window w as (partition by c_id order by s_score desc);
검색 결과교과 과정 번호 01 의 통계 결 과 를 보면 데이터 첫 줄 의 sumv 열,앞의 두 데 이 터 는 모두 160 이 고 함수 원리 에 따라 데 이 터 는 80,160 이 어야 합 니 다.
교과 과정 번호 02 의 통 계 를 보 니 결과 가 정확 하 다.sumv 의 첫 번 째 는 90 이 고 두 번 째 는 179 이다.
실제 결과 와 일치 하지 않 는 것 으로 나 타 났 는데 무슨 문제 가 생 겼 습 니까?
c_id
s_id
s_score
first_v
last_v
sum_v
max_v
min_v
count_v
row_id
rank_id
dense_id
01
01
80
80
80
160
80
80
2
1
1
1
01
03
80
80
80
160
80
80
2
2
1
1
01
05
76
80
76
236
80
76
3
3
3
2
01
02
70
80
70
306
80
70
4
4
4
3
01
04
50
80
50
356
80
50
5
5
5
4
01
06
31
80
31
387
80
31
6
6
6
5
02
01
90
90
90
90
90
90
1
1
1
1
02
07
89
90
89
179
90
89
2
2
2
2
02
05
87
90
87
266
90
87
3
3
3
3
02
03
80
90
80
346
90
80
4
4
4
4
02
02
60
90
60
406
90
60
5
5
5
5
02
04
30
90
30
436
90
30
6
6
6
6
03
01
99
99
99
99
99
99
1
1
1
1
03
07
98
99
98
197
99
98
2
2
2
2
03
02
80
99
80
357
99
80
4
3
3
3
03
03
80
99
80
357
99
80
4
4
3
3
03
06
34
99
34
391
99
34
5
5
5
4
03
04
20
99
20
411
99
20
6
6
6
5
사고 검증
과정 번호 02 의 데이터 가 정확 하고 01 의 부정 확 함,01 과 02 의 차 이 는 01 과정의 전 두 학생 의 성적 이 똑 같이 80 이다.
성적 이 똑 같 아서 sum 이 실 수 를 했 나 요?
이 문 제 를 검증 하기 위해 과정 번호 01,학 번 01 의 성적 을 82 로 수정 한 다음 에 조 회 를 실시 한 결 과 는 다음 과 같다.
sum 발견v 열 은 82,162 로 예상 결과 와 일치 합 니 다.
이렇게 하면 sum 이 window 함 수 를 실행 할 때 중복 데이터 가 있 으 면 같은 데 이 터 를 직접 추가 하 는 것 이 아니 라 점차적으로 추가 하 는 것 이 아니 라 는 결론 을 얻 을 수 있다.
c_id
s_id
s_score
first_v
last_v
sum_v
max_v
min_v
count_v
row_id
rank_id
dense_id
01
01
80
80
82
82
82
82
2
1
1
1
01
03
80
80
80
162
82
80
2
2
1
1
01
05
76
80
76
236
82
76
3
3
3
2
01
02
70
80
70
306
82
70
4
4
4
3
01
04
50
80
50
356
82
50
5
5
5
4
01
06
31
80
31
387
82
31
6
6
6
5
02
01
90
90
90
90
90
90
1
1
1
1
02
07
89
90
89
179
90
89
2
2
2
2
02
05
87
90
87
266
90
87
3
3
3
3
02
03
80
90
80
346
90
80
4
4
4
4
02
02
60
90
60
406
90
60
5
5
5
5
02
04
30
90
30
436
90
30
6
6
6
6
03
01
99
99
99
99
99
99
1
1
1
1
03
07
98
99
98
197
99
98
2
2
2
2
03
02
80
99
80
357
99
80
4
3
3
3
03
03
80
99
80
357
99
80
4
4
3
3
03
06
34
99
34
391
99
34
5
5
5
4
03
04
20
99
20
411
99
20
6
6
6
5
기타 Sql 검증 및 대비
상기 검증 을 통 해 Mysql 은 sum 에서 오류 가 발생 했 습 니 다.점차적으로 누적 되 는 것 이 아 닙 니 다.
다른 플랫폼 에 도 문제 가 있 는 지 Sqlite Expert 5.3 버 전 을 검증 한 결과 같은 결과 가 나 왔 습 니 다.
이것 은 이상 합 니 다.Mysql 이 실 현 될 때 오류 가 발생 하면 Sqlite 가 같은 실 수 를 할 확률 이 적 습 니 다.
sum 과 window 함수 가 결합 하여 사용 할 때의 특성 으로 인 한 것 입 니까?함께 토론 하고 연구 하 는 것 을 환영 합 니 다.
총결산
MySQL 이 window 함수 에 sum 함 수 를 실행 하 는 데 나타 날 수 있 는 bug 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 MySQL 이 window 함수 에 sum 함 수 를 실행 하 는 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.