이름 기준으로 중복 여부 확인
SELECT count(1) as cnt, count(distinct restaurant_name) as cnt_distinct
FROM restaurant;
이름이 중복인 경우 얼마나 중복 개수 확인
SELECT restaurant_name, count(1) as cnt
FROM restaurant
GROUP BY restaurant_name
HAVING cnt >= 2;
레스토랑 이름, 지역, 패스푸드 여부를 통해 모든 행 구분 여부 확인
SELECT count(1) as cnt, count(distinct restaurant_name, location, fast_food_or_not) as cnt_distinct
FROM restaurant
# 여전히 중복이 존재한다.
# 중복여부를 검사할 때 이 테이블은 컬럼이 하나라도 빠지면 중복이 발생한다. 즉, 이 테이블은 행끼리 구분할 수 있는
레스토랑 이름별로 전국 매장 개수, 평균 평점, 가격, 배달시간 확인
SELECT restaurant_name, count(1) as cnt, avg(rating) as avg_rating, avg(aaverage_price) as avg_price, avg(average_delivery_time) as avg_delivery_time)
FROM restaurant
GROUP BY restaurant_name
ORDER BY avg_rating DESC
LIMIT 20;
# 평균 평점이 높은 순으로 상위 20개 추출 (평점이 높은 매장은 프렌차이즈가 아니다. 즉 평점이 높은 매장은 전국에 1개 존재한다. 실제로 count에 따라 평점 평균에 차이가 있는지 확인해보자.)
count에 따라 평점 평균 차이 확인
WITH counts as (
SELECT restaurant_name, count(1) as cnt
FROM restaurant
GROUP BY restaurant_name
)
SELECT CASE cnt
WHEN 1 THEN 'cnt-1'
WHEN 2 THEN 'cnt-2'
ELSE 'cnt-ov3'
END as cnt_group, avg(rating) as avg_rating
FROM counts INNER JOIN restaurant ON counts.restaurant_name = restaurant.restaurant_name
GROUP BY cnt_group;
# 평균 평점이 매장 1개일 때 3.91, 매장 2개일 때 3.92, 매장이 3개 이상일 때 3.95이다.
# 프렌차이즈는 규격화 되어있는 항목들이 많다. 서비스나 음식 품질이 어느정도 보장되어 있는 가능성이 높다. 반면 단일 점포는 개성이 뚜렷한 가게들이 더 많고 서비스나 음식 품질의 편차가 클 것으로 예상이 된다.
정리