Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 범위리텐션
- openssh
- 패키지 관리자
- 티스토리
- github
- range retention
- RTO
- dpkg
- ssh-keygen
- DAU
- 하이퍼바이저
- pem
- 노션
- Wau
- GIT
- 다중 암호화 키
- 리텐션
- classic retention
- 롤링리텐션
- rolling retention
- N2TWinform
- 파이프(|)
- 정처기필기
- 데이터리안
- passphrase
- n2t
- stickiness
- RPO
- MAU
- 클래식리텐션
Archives
- Today
- Total
TobeSteady
[GROUP BY] Sub Query, JOIN | 01.응용 본문
프로그래머스 | GROUP BY | 즐겨찾기가 가장 많은 식당 정보 출력하기
자신있게 풀었으나 틀려버렸다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES # 음식 종류, ID, 식당 이름, 즐겨찾기수
FROM REST_INFO # 해당 테이블에서
GROUP BY FOOD_TYPE # 음식 종류별로
HAVING MAX(FAVORITES)# 즐겨찾기 수가 가장 많은
ORDER BY FOOD_TYPE DESC # 음식종류를 기준으로 내림차순 정렬
위의 식으로 풀게 되면, 어차피 GROUP BY로 각 음식종류별로 DISTANCE되어 각 음식종류별로 하나의 항목만 남게되어 HAVING 절의 의미가 없어진다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES # 음식 종류, ID, 식당 이름, 즐겨찾기수
FROM REST_INFO # 해당 테이블에서
GROUP BY FOOD_TYPE # 음식 종류별로
ORDER BY FOOD_TYPE DESC # 음식종류를 기준으로 내림차순 정렬
두번째로 만약 HAVING 절을 없애고, GROUP BY절로 묶기전에 SELECT절에서 "MAX(FAVORITES) AS FAVORITES"을 하게되더라도 원하는 값을 얻지 못한다.
그 이유는 " MAX(FAVORITES)을 하면 각 그룹의 최댓값을 가져오지만 그것에 일치하는 행 전체를 가져오지 않는다.
즉, 각 그룹의 첫 번째 행에 각 그룹의 FAVORITES 최댓값만 덮어써진 형태가 출력된다."
문제를 풀어보면 알겠지만, 본래 "하이가쯔네"의 FAVORITES는 112였으나 230으로 변경된 것이 확인된다.
이는 동일 음식 종류인 일식에서 MAX(FAVORITES)값을 가진 "스시사카우스"의 230이다.
해당 문제에 대해 "SUB_QUERY"통해 답을 구했다.
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;
또다른 방식으로 "RIGHT JOIN"을 사용하기도 한다.
SELECT A.FOOD_TYPE, A.REST_ID, A.REST_NAME, A.FAVORITES
FROM REST_INFO AS A
RIGHT 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
'Languages > SQL' 카테고리의 다른 글
[GROUP BY] Unknown column 'MAX_PRICE' in 'IN/ALL/ANY subquery' (0) | 2023.03.15 |
---|---|
[SUBQUERY&JOIN] 01. 서브쿼리를 조인으로 대체 할 수 있는 경우 (0) | 2023.03.10 |
[GROUP BY] Sub Query, JOIN | 02.차이 (0) | 2023.03.10 |
[SELECT] AVG, ROUND (0) | 2023.03.03 |
[SELECT] DATE_FORMAT / to_char (0) | 2023.03.03 |