728x90
반응형
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
내 생각
FOOD_TYPE으로 그룹화 하는 것 까지는 오케이,, 근데 답이 안나와서 검색해보니 서브쿼리 그게 뭔데..
1. 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회 : SELECT 절
2. REST_INFO 테이블에서 : FROM 절
3. 음식종류별로 즐겨찾기수가 가장 많은 식당
이 부분에서 서브쿼리가 필요하다 !!!
즉, WHERE 절에서 IN 으로 FOOD_TYPE별 즐겨찾기 수의 MAX인 식당을 뽑는다. 그리고 그 식당과 일치하는 식당을 조회한다.
4. 음식 종류를 기준으로 내림차순 정렬 : ORDER BY
내 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC;
* 서브 쿼리 - 다중 조건
SELECT *
FROM 테이블명
WHERE (컬럼1, 컬럼2) IN (SELECT 서브쿼리_컬럼1, 서브쿼리_컬럼2 FROM 서브쿼리_테이블);
서브쿼리는 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문이다 !
- 서브쿼리는 GORUP BY절을 제외하고 다 사용 가능
- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
- 서브쿼리에서는 OEDER BY 사용 못.함.
- 괄호안에 포함되어야 함.
IN 연산자를 사용하면 서브 쿼리 결과에서 여러 행과 여러 칼럼을 동시에 비교할 수 있다.
(= 연산자는 단일 값 비교 !)
수행 순서 : FROM → WHERE → 서브쿼리 → SELECT
서브쿼리 쉽지 않아 ㅎ 더 해봐야 감이 잡히겠다
728x90
반응형
'Algorithm > 코딩테스트 (SQL)' 카테고리의 다른 글
[프로그래머스][GROUP BY] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.12.27 |
---|---|
[프로그래머스][GROUP BY] 카테고리 별 도서 판매량 집계하기 (0) | 2023.12.24 |
[프로그래머스][JOIN] 오랜 기간 보호한 동물(1) (MySQL) (0) | 2023.12.16 |
[프로그래머스][GROUP BY] 입양 시각 구하기(1) (0) | 2023.12.12 |
[프로그래머스][GROUP BY] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (MySQL) (0) | 2023.12.10 |
댓글