🙂 확인 사항
1. REST_INFO 테이블
2. 음식종류별로 즐겨찾기수가 가장 많은
3. 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회
4. 음식 종류를 기준으로 내림차순 정렬
📝 Language: Oracle
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
SELECT FOOD_TYPE, MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC
;
|
* 중첩 서브 쿼리
- FOOD_TYPE과 FAVORITES를 Set로 잡아 Type 별 최대 즐겨찾기수만 Where절에 포함되도록 함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SELECT FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES
FROM (
SELECT FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES,
ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RN
FROM REST_INFO
)
WHERE RN = 1
ORDER BY FOOD_TYPE DESC
;
|
* 인라인 뷰
- 윈도우 함수: ROW_NUMBER
- FOOD_TYPE별로 FAVORITES를 내림차순하여 RN 추가
🚨 Window 함수는
- 개별 행마다 계산하므로 Group by보다 비효율적일 수 있음
- Distinct의 추가 작업이 필요하므로 비효율적일 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES
FROM REST_INFO r1
WHERE FAVORITES = (
SELECT MAX(FAVORITES)
FROM REST_INFO r2
WHERE r2.FOOD_TYPE = r1.FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC
;
|
* 중첩 서브 쿼리
⭐ 중첩 서브 쿼리에서 집계함수 사용 시, GROUP BY절 필수 X
- SELECT MAX(FAVORITES) FROM REST_INFO: 전체 테이블에서 최대값 조회
- WHERE 조건절: 메인 테이블의 FOOD_TYPE과 동일한 서브 테이블의 FOOD_TYPE 중 FAVORITES 최대값 조회
🔗 소스 코드
GitHub
'Computer > Algorithm_SQL' 카테고리의 다른 글
[Algorithm_SQL] 카테고리 별 도서 판매량 집계하기 (Success) (0) | 2023.10.31 |
---|---|
[Algorithm_SQL] 조건별로 분류하여 주문상태 출력하기 (Success) (0) | 2023.10.22 |
[Algorithm_SQL] 보호소에서 중성화한 동물 (Success) (0) | 2023.10.21 |
[Algorithm_SQL] 헤비 유저가 소유한 장소 (Success) (1) | 2023.10.20 |
[Algorithm_SQL] 오랜 기간 보호한 동물(2) (Success) (0) | 2023.10.18 |