SQL에서 소수점 연산

Gi Woon Lee·2024년 12월 9일
0

TIL

목록 보기
73/78

문제 링크: https://solvesql.com/problems/ratio-of-gifts/

TIL (Today I Learned): SQL에서 소수점 연산과 기증품 비율 계산


학습 내용

  1. 기증품 비율 계산 쿼리 작성

    • MoMA의 artworks 테이블에서 credit 컬럼에 'gift'라는 표식이 포함된 데이터를 "기증품"으로 간주.
    • 전체 작품 수와 기증품 수를 기반으로 비율을 계산.
    WITH 
    gift AS (
        SELECT COUNT(*) AS gift_count
        FROM artworks
        WHERE credit LIKE '%gift%'
    ),
    artwork_num AS (
        SELECT COUNT(*) AS total_count
        FROM artworks
    )
    SELECT 
        ROUND((73597.0 / 130262.0) * 100, 3) AS donation_percentage;
  2. 쿼리 결과:

    • 전체 작품 중 기증품의 비율은 약 56.493%.

핵심 포인트

  1. 소수점 연산을 위한 숫자 형식 지정

    • SQL에서 정수로 나눗셈을 하면 결과는 정수형으로 반환된다.
      예를 들어, 73597 / 1302620으로 결과를 내놓는다.
    • 이를 방지하려면 숫자에 .0을 추가하여 부동소수점(소수) 연산을 수행해야 한다.
      SELECT 73597.0 / 130262.0; -- 결과: 0.564933
  2. ROUND 함수로 소수점 자리수 조정

    • ROUND(expression, n) 함수는 결과를 소수점 n 자리까지 반올림한다.
      SELECT ROUND(0.564933 * 100, 3); -- 결과: 56.493
  3. WITH문을 활용한 서브쿼리 구조화

    • 가독성과 유지보수를 위해 WITH를 사용해 서브쿼리를 구조화:
      • gift: 'gift' 조건에 맞는 기증 작품의 개수를 계산.
      • artwork_num: 전체 작품 개수를 계산.

배운 점

  1. SQL 정수 나눗셈과 소수 연산의 차이

    • SQL에서는 정수끼리의 나눗셈은 정수 결과를 반환하므로, 반드시 부동소수점으로 처리해야 한다.
    • .0을 추가하거나 CAST로 타입 변환을 명시적으로 수행할 수 있다:
      SELECT CAST(73597 AS FLOAT) / 130262;
  2. 결과를 이해하기 쉽게 표현하기 위한 포맷팅

    • 비율 계산 후 %로 출력하려면 100을 곱한 후 반올림:
      SELECT ROUND((73597.0 / 130262.0) * 100, 3) AS percentage;
  3. 쿼리 가독성을 높이기 위한 WITH 활용

    • 복잡한 쿼리를 여러 단계로 나누어 작성하여 코드의 명확성과 재사용성을 높임.

활용 가능 시나리오

  • 작품 기증 비율, 매출 구성 비율, 특정 조건에 맞는 데이터의 비율 등을 구하는 비즈니스 데이터 분석.
  • 가독성을 고려한 서브쿼리 구조화와 소수점 연산은 대규모 데이터셋을 다루는 데 유용.

관련 코드 정리

WITH 
gift AS (
    SELECT COUNT(*) AS gift_count
    FROM artworks
    WHERE credit LIKE '%gift%'
),
artwork_num AS (
    SELECT COUNT(*) AS total_count
    FROM artworks
)
SELECT 
    ROUND((73597.0 / 130262.0) * 100, 3) AS donation_percentage;

0개의 댓글