https://school.programmers.co.kr/learn/courses/30/lessons/131123
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
식당의 정보를 담은 REST_INFO 테이블
Column name | Type | Nullable | |
REST_ID | 식당 ID | VARCHAR(5) | FALSE |
REST_NAME | 식당 이름 | VARCHAR(50) | FALSE |
FOOD_TYPE | 음식 종류 | VARCHAR(20) | TRUE |
VIEWS | 조회수 | NUMBER | TRUE |
FAVORITES | 즐겨찾기수 | NUMBER | TRUE |
PARKING_LOT | 주차장 유무 | VARCHAR(1) | TRUE |
ADDRESS | 주소 | VARCHAR(100) | TRUE |
TEL | 전화번호 | VARCHAR(100) | TRUE |
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
출력 예시
FOOD_TYPE | REST_ID | REST_NAME | FAVORITES |
한식 | 00001 | 은돼지식당 | 734 |
일식 | 00004 | 스시사카우스 | 230 |
양식 | 00003 | 따띠따띠뜨 | 102 |
1. 서브 쿼리로 그룹별 최댓값을 구하고, INNER JOIN으로 일치하는 행 조회
SELECT o.FOOD_TYPE, o.REST_ID, o.REST_NAME, o.FAVORITES
FROM REST_INFO o INNER JOIN
(SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES FROM REST_INFO
GROUP BY FOOD_TYPE) t
ON o.FOOD_TYPE = t.FOOD_TYPE AND o.FAVORITES = t.FAVORITES
ORDER BY FOOD_TYPE DESC;
2. HAVING 사용 => 틀린 풀이
그룹으로 묶으면 REST_ID, REST_NAME이 FAVORITES가 최댓값일 때의 값과 일치하지 않음
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO GROUP BY FOOD_TYPE
HAVING FAVORITES = MAX(FAVORITES) ORDER BY FOOD_TYPE DESC;
'문제 풀이 > SQL' 카테고리의 다른 글
[SQL/MySQL] [Programmers] 루시와 엘라 찾기 (0) | 2023.03.24 |
---|---|
[SQL/my sql] [programmers] 없어진 기록 찾기 (0) | 2023.03.11 |
[programmers] [SQL/MySQL] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.03.04 |
[SQL/mysql] [programmers] 조건별로 분류하여 주문상태 출력하기 (0) | 2023.02.26 |
[SQL] [programmers] 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.02.14 |