문제 1. 년, 월, 성별 별 상품 구매 회원 수 구하기
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
💡 문제 풀이
SELECT YEAR(o.SALES_DATE) AS YEAR
,MONTH(o.SALES_DATE) AS MONTH
,u.GENDER
,COUNT(distinct u.user_id) AS USERS
FROM USER_INFO u
JOIN ONLINE_SALE o
ON u.user_id = o.user_id
WHERE GENDER IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3;
오답노트
- count(u.user_id)가 아니라 count(distinct u.user_id)를 해야 함. 문제에 보면 '동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.'라는 말이 있고 그 말인 즉슨 한 회원이 같은 날 여러개의 상품을 구매하는 경우 여러 행으로 나타난다는 뜻이기 때문에 구매를 한 회원 수를 구하는 이 문제에서는 distinct 처리 해야 함.
문제 2. 서울에 위치한 식당 목록 출력하기
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
💡 문제 풀이
SELECT i.REST_ID,
i.REST_NAME,
i.FOOD_TYPE,
i.FAVORITES,
i.ADDRESS,
ROUND(AVG(r.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO i
JOIN REST_REVIEW r
ON i.REST_ID = r.REST_ID
WHERE SUBSTR(ADDRESS,1,2)='서울'
GROUP BY i.REST_ID
ORDER BY 6 desc, 4 desc;
- -- 조회: 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수
-- 조인키: rest_id
-- 조건: 서울에 위치한 식당들
-- 표현: 리뷰 평균점수는 소수점 세 번째 자리에서 반올림
-- 정렬: 평균점수 기준 내림차순, 즐겨찾기수 내림차순