이 문제는 손실 발생한 drug를 기준으로 제조사별로 손실 정보를 집계하는 문제이다.
문제의 요구사항은 다음과 같다.
손실을 구하려면 이전 total-sales - cogs를 하면 된다.
여기서 음수로 나오는 값들을 조건으로 추리면 손실 금액 기준으로 조회를 하게 된다.
SELECT
manufacturer,
count(drug) as drug_count,
abs(total_sales - cogs) as total_loss
FROM pharmacy_sales
where (total_sales - cogs) < 0
group by manufacturer
order by total_loss desc
;
이렇게 쿼리를 짰던 이유는
이렇게 짠 쿼리문은 문제를 통과하지 못했다. 결과값도 다르게 나왔다.
이유는 손실 금액을 합치지 않아서 였다.
abs(total_sales - cogs)
제조사별로 여러 손실 난 drug가 존재할 수 있을 텐데 그 부분을 고려하지 못한 것이다.
제조사별 총 손실을 구해야 하는 데 개별 행별로 손실을 계산하고 마무리한 것이다.
개별 drug 별로의 손실로 정렬까지 진행해서 정렬 기준도 잘못 되었다.
쿼리를 수정하기 위한 핵심 부분은 다음과 같다.
1. 손실 데이터 기준 조건 필터링
2. 제조사 기준 집계
3. 제조사별 손실 총합 계산
4. 손실 총합으로 정렬
SELECT
manufacturer,
count(drug) as drug_count,
sum(abs(total_sales - cogs)) as total_loss
FROM pharmacy_sales
where (total_sales - cogs) < 0
group by manufacturer
order by total_loss desc
;
행별로 계산하던 손실을 총합으로 수정해줘서 제조사별 손실 총합을 구할 수 있게 되었다.
그리고 집계한 결과를 가지고 정렬도 수행했다.

통과!!!