이 문제는 제조사별로 총 매출을 계산한 다음에 백만 단위로 반올림하는 문제다.
그리고 결과를 '$00 million'이 형식의 문자로 만들어줘야 한다.
문제에서 요구하는 조건들을 다시 정리하면 다음과 같다.
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
;
위의 쿼리로 문제를 통과했다.
문제를 풀면서 헷갈렸던 부분을 정리해보면 다음과 같다.
문제를 풀 때 문자열을 만들어줘야하는 데 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을 중복해서 사용하지 않고 사용하는 방법으로 풀어주면 된다.
SELECT manufacturer, concat('$', round(sum(total_sales) / 1000000), " million") as sale
FROM pharmacy_sales
GROUP BY manufacturer
ORDER BY sum(total_sales) DESC, manufacturer
;
