ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] data.world tutorial SQL Aggregatio 예제 풀이
    데이터 분석/DB & SQL 2020. 5. 1. 10:14

    역시 데이터는 row 도 중요하지만 집계도 중요하다. 
    이 글은 data.world 의 Aggregation 튜토리얼 예시에 대한 풀이이다. [링크]

     

    Aggregations

    Learn about aggregations, aggregation function and aggregation modifiers in this SQL tutorial. Visit for a full course on learning the basics of SQL.

    docs.data.world

     

    Aggregation 에 대한 1줄 정리

    An aggregation is the result returned from running an aggregate function in a query and is displayed in a new column in the results table. An aggregate function is a function that results of a set of the data queried being condensed into an aggregation.

    집계는 aggregate function 을 사용한 쿼리를 수행하여 결과를 리턴하며, 결과 셋에 새로운 컬럼으로 표시된다. Aggregate function 은 집계로 요약된 데이터셋을 제공하는 함수이다. 

    COUNT, SUM, AVG, MIN, MAX 대표적인 함수에 대한 예제이다.

     


     

    1. 요구사항을 검토한다.

    예제에서 우리가 관심있는 값은 거래의 value 이다.

    sales_pipeline 테이블에서는 close_value 필드에 저장된다. 
    또 살펴보아야하는 필드가 deal_stage 이다. 거래 단계에 따라 close_value 의 값이 다른 형태로 저장되기 때문이다!

    Requirement Aggregation Function Deal Stage
    the total value of all the deals closed* SUM ? --> Won, Lost
    the number of deals we had won COUNT Won
    the average deal won AVG Won
    the largest deal MAX All (Won, Lost, In Progress)
    the smallest deal MIN All (Won, Lost, In Progress)

    *사실 closed 가 모호하니까, 요구사항 낸 사람에게 물어봐서 답을 얻었다. Won, Lost 로

     

    2. Dataset 을 확인한다.

    쿼리하기에 앞서 deal_stage 에 따라 close_vlaue 가 어떻게 쌓이는지 확인한다.

    deal_stage 에 따른 close_value

     

    3. 집계 추출

    3-a. the total value of all the deals closed

    SELECT SUM(close_value) FROM sales_pipeline
    WHERE sales_pipeline.deal_stage IN ("Won", "Lost")

    closed 에 대해서 피드백을 주고받은 후 거래상태를 명시하였다.
    쿼리 결과에 따르면 closed_date 가 있는 것 / closed_value 가 numeric value 로 저장된 거래가 closed 임을 알 수 있다. 
    (즉 closed 는 거래단계 Won, Lost 을 포괄한다.)

     

    3-b. the number of deals we had won

    SELECT COUNT(close_value) FROM sales_pipeline
    WHERE deal_stage = "Won"


    주의 COUNT(*) 와 COUNT(컬럼명) 은 결과값이 다를 수 있다.

    - COUNT (*): FROM, WHERE 을 통해 가져온 데이터의 모든 행의 수 
    - COUNT (close_value): FROM, WHERE 을 통해 가져온 데이터의 close_value NOT NULL 값의 수

    COUNT(*) 와 COUNT(컬럼명) 은 결과값이 다를 수 있다.

    In Progress 의 거래는 2089 개가 있지만, close_value 값이 null 이므로 COUNT(close_value) 를 실행시킬 때 집계 대상이 아니다. 
    물론 진행중인 거래는 close_value 가 없으므로, 이런 요구사항이 들어오지 않겠지만.

     

    3-c. the average deal won

    SELECT AVG(close_value) FROM sales_pipeline
    WHERE deal_stage = "Won"

     

    3-d. the largest deal

    SELECT MAX(close_value) FROM sales_pipeline

     

     

    3-e. the smallest deal

    SELECT MIN(close_value) FROM sales_pipeline
    -- 0

    SELECT MIN(close_value) FROM sales_pipeline
    WHERE deal_stage = "Won"
    -- 38

    주의. 사실 요구사항에서 거래상태에 대해 명시해 주지 않았기 때문에 결과는 0 이다.
    하지만 요구사항을 준 사람이 의도한 바는 성사된 거래 중 가장 작은 가치의 거래일 가능성이 높다. 좋은 결과를 여러 차례 피드백을 주고 받는 것이 중요하다. 


    사실 전체 테이블을 대상으로 집계하기도 하지만 특정 컬럼의 값에 대하여 구분하여 집계하기도 한다.  (피벗테이블의 원리) 
    그래서 그 다음 소개할 내용은 GROUP BY 이다.

    댓글

Designed by Tistory.