MySQL 이 window 함수 에 sum 함 수 를 실행 하면 나타 날 수 있 는 Bug

6604 단어 mysql함수.sum
MySql 의 창 함수 통계 데 이 터 를 사용 할 때 작은 문 제 를 발견 하여 여러분 과 함께 토론 합 니 다.
환경 설정:
  • mysql-installer-community-8.0.20.0
  • 문제 점:sum 에서 window 함 수 를 실행 할 때 중복 데이터 가 있 으 면 같은 데 이 터 를 직접 추가 합 니 다.점차적으로 추가 하 는 것 이 아 닙 니 다.
    문제 설명
    데이터:한 성적표 에 세 개의 필드 가 있 습 니 다:학생 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 함 수 를 실행 하 는 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기