。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

ㅋㅌ

[SQL] 서브쿼리 사용

quarrrter 2023. 9. 12. 23:52
SELECT 
	FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM 
	REST_INFO AS r1
WHERE 
	FAVORITES = (
    SELECT MAX(FAVORITES) 
  	FROM REST_INFO AS r2 
 	WHERE r1.FOOD_TYPE = r2.FOOD_TYPE
	)
ORDER BY 
	FOOD_TYPE DESC;
  1. SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES: FOOD_TYPE, REST_ID, REST_NAME, FAVORITES 열을 선택합니다.
  2. FROM REST_INFO AS r1: REST_INFO 테이블을 r1이라는 별칭으로 사용합니다.
  3. WHERE FAVORITES = (SELECT MAX(FAVORITES) ...): 각 음식 종류별로 가장 많은 즐겨찾기 수를 가진 식당을 찾기 위해 서브쿼리를 사용합니다.
  4. FROM REST_INFO AS r2: 동일한 푸드 타입에 속하는 다른 식당들을 r2로 지정합니다.
  5. WHERE r1.FOOD_TYPE = r2.FOOD_TYPE: r1과 r2의 음식 종류가 동일한지 비교합니다.
  6. ORDER BY FOOD_TYPE DESC: 결과를 음식 종류를 기준으로 내림차순으로 정렬합니다.

 

만약 5. WHERE r1.FOOD_TYPE = r2.FOOD_TYPE 구문을 생략한다면,

서브쿼리는 모든 레코드에서 가장 높은 FAVORITES 값을 반환할 것입니다.

그렇게 되면 모든 음식 종류에 대해 가장 높은 즐겨찾기 수를 가진 식당이 선택될 것입니다.

 

즉, 서브쿼리에서 어떠한 필터링이 없기 때문에 가장 높은 즐겨찾기 수를 가진 식당이 무엇이든 간에 모든 음식 종류에 대해 반환될 것입니다.

결과적으로, 각 음식 종류별로 가장 높은 즐겨찾기 수를 가진 식당을 찾기 위해서는 WHERE r1.FOOD_TYPE = r2.FOOD_TYPE와 같은 필터링이 필요합니다.

'ㅋㅌ' 카테고리의 다른 글

[SQL] JOIN  (0) 2023.09.17
[SQL] WHERE 절 안에 WHERE ,,!  (0) 2023.09.14
[SQL] FLOOR  (0) 2023.09.11
LEFT, GROUP BY  (0) 2023.09.10
[SQL] GROUP BY  (1) 2023.09.08