MySQL 에서 sum 함수 가 사용 하 는 인 스 턴 스 튜 토리 얼

문장 소개
오늘 MySQL 의 sum 함 수 를 공유 합 니 다.이 함 수 는 이미 여러분 이 MySQL 데이터 베 이 스 를 조작 할 때 자주 사용 하 는 함수 가 되 었 습 니 다.이 함수 통 계 는 조건 줄 에서 지정 한 열 을 만족 시 키 는 것 과 모두 가 알 고 있 을 것 입 니 다.그 자체 가 할 말 이 없습니다.이 글 은 주로 몇 가지 작은 사례 를 통 해 이 함 수 를 깊이 이해 하고 MySQL 조 회 를 할 때 sum 함 수 를 어떻게 사용 하 는 지 최적화 하 는 것 입 니 다.
문법 분석
SUM([DISTINCT] expr) [over_clause]
  • Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used to sum only the distinct values of expr.
  • If there are no matching rows, SUM() returns NULL.
  • This function executes as a window function if over_clause is present.
  • 위의 몇 마디 는 MySQL 공식 문서 의 기능 설명 이다.여기 서 대체적인 뜻 이 무엇 인지 번역 해 보 세 요.
    expr 표현 식 의 합 을 되 돌려 줍 니 다.줄 수 를 되 돌려 주지 않 으 면 NULL 로 돌아 갑 니 다.여기 DISTINCT 는 표현 식 expr 의 중복 값 을 제거 하기 위해 서 입 니 다
  • 줄 에 일치 하지 않 으 면 이 함수 도 NULL 로 돌아 갑 니 다
  • over 를 설정 하면clause,이 함 수 는 창 함수 로 실 행 됩 니 다.창 함수 에 익숙 하지 않 은 경우 MySQL 의 창 함 수 를 알 아 볼 수 있 습 니 다
  • 함수 해석
    이 함 수 를 사용 할 때,우 리 는 이 함수 가 어떻게 표현 식 의 합 을 통계 하 는 지 생각해 봐 야 한다.아마도 어떤 프로그래머 들 은 이 함수 가 조건 중의 모든 줄 의 총 계 를 직접 통계 해 야 한다 고 생각 할 것 이다.이렇게 이해 하 는 것 도 사실 틀림없다.단지 표현 이 정확 하지 않 거나 운행 원 리 를 진실 하 게 이해 하지 못 할 뿐이다.
    실제로 이 함 수 는 일치 하 는 줄 의 값 에 따라 하나 하 나 를 누적 한 것 이다.여기 서 예 를 들 어 하나의 주문서 에서 조건 을 만족 시 키 는 데 10 줄 의 데이터 가 있 습 니 다.우 리 는 주문서 의 총 가격 을 통계 해 야 합 니 다.sum 의 초기 값 은 0 입 니 다.첫 줄 에 맞 을 때 주문 가격 은 10 입 니 다.이때 sum 은 10 이 되 고 두 번 째 줄 에 맞 으 며 주문 가격 은 20 입 니 다.이때 sum 은 30 입 니 다.세 번 째 줄 의 주문 가격 은 50 이 고 이때 sum 은 80 입 니 다.이런 방식 에 따라 순서대로 누적 하 다.
    행수
    주문 가격
    sum 값
    첫 줄
    10.00
    10.00
    두 번 째 줄
    20.00
    30.00
    셋째 줄
    30.00
    60.00
    네 번 째 줄
    40.00
    100.00
    다섯 째 줄
    50.00
    150.00
    제..행
    ...
    ...
    열 째 줄
    100.00
    550.00
    실례 시범
    다음 표(Delivery)가 있다 고 가정 하면 표 구 조 는 다음 과 같다.
    
    +-----------------------------+---------+
    | Column Name   | Type |
    +-----------------------------+---------+
    | delivery_id   | int |
    | customer_id   | int |
    | order_date   | date |
    | customer_pref_delivery_date | date |
    | order_money   | decimal |
    +-----------------------------+---------+
    
    delivery_id 는 시계의 메 인 키 입 니 다.
    이 시 계 는 고객 의 음식 배 송 정 보 를 저장 하고 고객 이 특정한 날짜 에 주문 을 했 고 원 하 는 배 송 날짜(주문 날짜 와 같 거나 그 후에)를 지정 했다.만약 에 고객 이 원 하 는 배 송 날짜 가 주문 날짜 와 같다 면 이 주문 서 는'즉시 주문'이 라 고 부 르 고 그렇지 않 으 면'계획 주문'이 라 고 부른다.
    안에 다음 과 같은 데이터 가 있 습 니 다.
    
    +-------------+-------------+------------+-----------------------------+-------------+
    | delivery_id | customer_id | order_date | customer_pref_delivery_date | order_money |
    +-------------+-------------+------------+-----------------------------+-------------+
    | 1  | 1  | 2019-08-01 | 2019-08-02   | 1.23 |
    | 2  | 5  | 2019-08-02 | 2019-08-02   | 1.01 |
    | 3  | 1  | 2019-08-11 | 2019-08-11   | 1.09 |
    | 4  | 3  | 2019-08-24 | 2019-08-26   | 1.00 |
    | 5  | 4  | 2019-08-21 | 2019-08-22   | 10.00 |
    | 6  | 2  | 2019-08-11 | 2019-08-13   | 12.09 |
    +-------------+-------------+------------+-----------------------------+-------------+
    
    실례 1
    이 표 의 모든 주문 총 금액 을 통계 해 내다.여 기 는 매우 간단 합 니 다.또한 우리 가 자주 사용 하 는 방식 이기 도 합 니 다.sum()매개 변 수 는 특정한 열 을 작성 하면 됩 니 다.위의 문법 규칙 에 따 르 면 하나의 표현 식 이 어야 하 며,실제로 한 열 도 하나의 표현 식 이다.
    
    select sum(order_money) from Delivery;
    
    실례 2
    SQL 조회 문 구 를 써 서 실시 간 주문 이 차지 하 는 백분율 을 얻 고 두 개의 소 수 를 유지 합 니 다.이것 은 아마 조금 어 려 울 것 이다.왜냐하면 너 는 이 문법 을 거의 사용 하지 않 기 때문이다.만약 에 네가 사용 해 보면 매우 간단 하 다 는 것 을 알 게 될 것 이다.
    우선 어떤 유형의 비례 를 조회 하 는 것 이 니 통계 총화 가 필요 하 다 는 것 을 이해 해 야 한다.우 리 는 각각 주문 총계 와 sum 1 을 통계 한 다음 에 실시 간 주문 총계 와 sum 1 을 통계 한 다음 에 실시 간 주문 총계 와 sum 1 을 통계 한 다음 에 실시 간 주문 총계 와 sum 2 를 통계 할 수 있다.그리고 다시 만 나 면 돼.하지만 여기 에는 SQL 문 구 를 명확 하 게 요구 합 니 다.그럼 어떻게 해결 해 야 하나 요?
    여기 서 sum 의 운행 원 리 를 깊이 이해 해 야 합 니 다.우 리 는 우리 가 한 줄 한 줄 데 이 터 를 읽 고 sum 한 줄 한 줄 을 누적 하면 sum 2 의 종합 을 얻 을 수 있 지 않 습 니까?sum 2 의 종합 까지?sum 2 의 종합 까지?sum 1 에 대해 서 는 통계 가 좋 을 것 이 고 바로 표 중 행 수의 종합 이다.
    문제 풀이 방법 1:
    
    select round (
     sum(case when order_date = customer_pref_delivery_date then 1 else 0 end) /
     count(*) * 100,
     2
    ) as immediate_percentage
    from Delivery
    
    문제 풀이 방식 2:
    
    select round (
     sum(order_date = customer_pref_delivery_date) /
     count(*) * 100,
     2
    ) as immediate_percentage
    from Delivery
    
    여기 서 sum 표현 식 이 조건 을 만족 시 키 면 1 을 되 돌려 줍 니 다.만 족 스 러 운 한 줄 의 데 이 터 를 읽 을 때마다 sum 은 1 을 추가 하고 마지막 에 데 이 터 를 읽 으 면 sum 도 추 가 됩 니 다.그래서 조건 을 충족 시 키 는 총 항목 이 나 왔 다.
    제목 출처
    제목 을 바 꾸 는 것 은 LeetCode 에서 나온다.
    출처:스냅 백(LeetCode)
    링크:leetcode-cn.com/problems/im..
    또 하나의 좋 은 예 가 있 으 니 잘 읽 어 보 는 것 을 추천 합 니 다.이 함수 의 사용 장면 을 심화 시 킵 니 다.
    https://www.jb51.net/article/207813.htm
    총결산
    MySQL 에서 sum 함수 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.MySQL sum 함수 사용 에 관 한 더 많은 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기