반응형
풀이 (MySQL)
FOOD_TYPE별로 FAVORITES가 가장 높은 식당의 ID와 NAME을 함께 출력해야 한다.
필자는 FOOD_TYPE별 가장 높은 FAVORITES를 추린 뒤, WHERE절에서 비교하여 가져오는 방식으로 해결했다.
Implicit Join
SELECT
A.FOOD_TYPE
, REST_ID
, REST_NAME
, FAVORITES
FROM
REST_INFO AS A
, (
SELECT
FOOD_TYPE
, MAX(FAVORITES) AS MAX_FAVORITES
FROM
REST_INFO
GROUP BY
FOOD_TYPE
) AS B
WHERE
A.FOOD_TYPE = B.FOOD_TYPE
AND A.FAVORITES = B.MAX_FAVORITES
GROUP BY
FOOD_TYPE
ORDER BY
FOOD_TYPE DESC
위 코드는 처음 작성한 코드로, 조금 알아보니 "Implicit Join" 또는 "Old Style Join" 방식이라고 한다. FROM절에 여러 개의 테이블을 명시하고 WHERE 절에 JOIN 조건을 작성하는 방식을 일컫는다.
이같은 방식은 JOIN 구문을 사용할 때와 비교하여 효율성 면에선 크게 차이가 나지는 않는다고 한다. 단, 어떤 테이블끼리 조인 관계에 놓였는지 명확하게 명시되지 않아 가독성이 떨어지기 때문에 권장되지는 않는 방식이라고 한다. 따라서 JOIN 구문을 사용하여 아래와 같이 작성하는 것이 보다 바람직하다고 할 수 있겠다.
Explicit Join
SELECT
A.FOOD_TYPE
, A.REST_ID
, A.REST_NAME
, A.FAVORITES
FROM
REST_INFO AS A
INNER JOIN
(
SELECT
FOOD_TYPE
, MAX(FAVORITES) AS MAX_FAVORITES
FROM
REST_INFO
GROUP BY
FOOD_TYPE
) AS B
ON
A.FOOD_TYPE = B.FOOD_TYPE
AND A.FAVORITES = B.MAX_FAVORITES
ORDER BY
FOOD_TYPE DESC;
반응형
'SQL 쿼리 연습 > GROUP BY' 카테고리의 다른 글
[Lv.2 / 프로그래머스 / SQL] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.07.31 |
---|---|
[Lv.3 / 프로그래머스 / SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.04.16 |
[Lv.2 / 프로그래머스 / SQL] 입양 시각 구하기(1) (0) | 2023.04.04 |
[Lv.2 / 프로그래머스 / SQL] 동명 동물 수 찾기 (0) | 2023.02.16 |
[Lv.2 / 프로그래머스 / SQL] 고양이와 개는 몇 마리 있을까 (0) | 2023.02.14 |