[DataLemur] Pharmacy Analytics (Part 3)

다람·2026년 4월 8일

DataLemur

목록 보기
6/8
post-thumbnail

1. 문제 이해

이 문제는 제조사별로 총 매출을 계산한 다음에 백만 단위로 반올림하는 문제다.
그리고 결과를 '$00 million'이 형식의 문자로 만들어줘야 한다.

문제에서 요구하는 조건들을 다시 정리하면 다음과 같다.

  • 제조사별 총 매출 계산
  • 백만 단위 변환 및 반올림
  • '$00 million'형태로 출력
  • 총 매출 기준 내림차순 정렬
  • 총 매출이 같으면 제조사명으로 정렬

2. 접근 방법

SELECT manufacturer, concat('$', concat(round(sum(total_sales) / 1000000), " million")) as sale
FROM pharmacy_sales
GROUP BY manufacturer
ORDER BY sum(total_sales) DESC, manufacturer
;

위의 쿼리로 문제를 통과했다.

문제를 풀면서 헷갈렸던 부분을 정리해보면 다음과 같다.

3. 헷갈린 부분

문자열 포맷 처리

문제를 풀 때 문자열을 만들어줘야하는 데 CONCAT이 죽어도 떠오르지 않아서 쿼리를 완성하는 데 시간이 더 소요됐다..

CONCAT()

CONCAT() 함수는 둘 이상의 문자열이나 컬럼 값을 하나로 연결하여 반환하는 함수다.
CONCAT(str1, str2, ...) 형태를 사용하며 여러 인수를 순서대로 합쳐준다.
숫자 등 다른 데이터 타입도 문자열로 자동 변환하여 결합하는 것이 가능하다.
그러나 인수에 NULL이 포함된다면 결과도 NULL이 나오게 된다.

둘 이상의 여러 인수를 합친다는 것을 기억해야 될 것 같다.

문제를 풀어낼 때 concat(str1, str2) 이렇게만 생각해서 문자열 포맷처리 할 때 concat을 두 번이나 사용했다.
concat('$', concat(round(sum(total_sales) / 1000000), " million"))

물론 위 처럼 풀이도 가능하지만
concat('$', round(sum(total_sales) / 1000000), " million")
이렇게 concat을 중복해서 사용하지 않고 사용하는 방법으로 풀어주면 된다.

3. 수정 쿼리

SELECT manufacturer, concat('$', round(sum(total_sales) / 1000000), " million") as sale
FROM pharmacy_sales
GROUP BY manufacturer
ORDER BY sum(total_sales) DESC, manufacturer
;

profile
개발하는 다람쥐

0개의 댓글