코딩테스트 연습 - 즐겨찾기가 가장 많은 식당 정보 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
REST_INFO 라는 식당ID와, 식당이름, 음식종류 그리고 즐겨찾기된 숫자로 구성된 테이블이 있다.
이때, 음식종류 별 가장 많은 즐겨찾기를 받은 식당을 1개 씩만 출력해야한다. 그럼 아래와 같이 3개의 서브쿼리를 활용한 답안이 제시 된다. (1) 인라인 뷰, (2)와 (3) WHERE절 서브쿼리 그 밖에 JOIN으로도 해결할 수 있지만 쿼리 작성능이 효율적이지 않아서 제외 시켰다. 아래 3 가지 TYPE 중 인라인 뷰는 내가 작성한 답안이고 나머지는 따왔다.
SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
FROM(SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE) AS T, REST_INFO AS R
WHERE R.FAVORITES = T.FAVORITES AND R.FOOD_TYPE = T.FOOD_TYPE
ORDER BY 1 DESC;
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES IN (SELECT MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
select a.FOOD_TYPE, a.REST_ID, a.REST_NAME, a.FAVORITES
from REST_INFO a
where a.FAVORITES =
(
select max(b.FAVORITES)
from REST_INFO b
where a.FOOD_TYPE =b.FOOD_TYPE
)
order by 1 desc
'[Tools] > SQL 이것저것' 카테고리의 다른 글
[MySQL] JOIN과 CTE의 활용 (4) | 2024.10.10 |
---|---|
[MySQL] 데이터 내 중복 값들을 가진 인스턴스만 추출하기 (2) | 2024.10.10 |
[MySQL] DATEDIFF(), TIMESTAMPDIFF() (0) | 2024.10.09 |
[MySQL] JOIN의 cheatsheet (0) | 2024.10.08 |
[MySQL] LIKE 를 여러 개 걸 때? 정규 표현식 REGEXP() 그리고 집합연산 (1) | 2024.10.08 |