
이 문제는 주문당 평균 아이템 개수를 구하는 문제이다.
단순 평균을 계산하는 것이 아닌 가중 평균 개념을 사용한다.
공식은 다음과 같다.
SELECT round(
(sum(item_count * order_occurrences) / sum(order_occurrences)) * 10
) / 10 as mean
FROM items_per_order;
이 방식은 소수점 처리를 직접 하는 방식이다.
1. 평균값에 10을 곱한다.
2. round로 반올림한다.
3. 다시 10으로 나눈다.
SELECT round(
(sum(item_count * order_occurrences) / sum(order_occurrences))
, 1
)as mean
FROM items_per_order;
SELECT round(
(sum(item_count * order_occurrences) / sum(order_occurrences))::NUMERIC
, 1
)as mean
FROM items_per_order;

MySQL은 타입에 비교적 관대한 편이라고 한다.
PostgreSQL은 타입에 엄격하다.
-- PostgreSQL
ROUND(double precision, 1) # 에러 발생
ROUND(numeric, 1) # 정상 동작
MySQL은 정수끼리 나눗셈을 하면 자동으로 실수의 결과가 나온다.

PostgreSQL은 정수끼리 나눗셈을 하면 정수의 결과가 나온다.

그래서 PosgreSQL에서는 정확한 소수 결과를 얻기 위해서는 numeric 타입으로 캐스팅을 해주는 것이 필요하다.