일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 데이터과학
- softeer
- 코세라
- Data Science
- 소프티어
- 티스토리챌린지
- data science methodology
- Python
- 알고리즘
- AI Mathematics
- 파이썬
- string
- 클린코드 파이썬
- Boostcamp AI
- 코딩테스트
- 클린코드
- 프로그래머스
- programmers
- 데이터사이언스
- 자바
- 코테
- IBM
- Clean Code
- Coursera
- 깨끗한 코드
- 부스트캠프
- 오블완
- 데이터 사이언스
- 문자열
- Today
- Total
떼닝로그
[Python] 프로그래머스 Lv4. 서울에 위치한 식당 목록 출력하기 (SQL WHERE/HAVING) 본문
[Python] 프로그래머스 Lv4. 서울에 위치한 식당 목록 출력하기 (SQL WHERE/HAVING)
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
기록의 이유...
막 어려운 문제는 전혀 아니었는데 테케 고려를 안 해서 질문하기까지 봤던 ㅎㅎ
나는야 셀렉트 마스터
한번에 통과하지 못했던 이유는 "서울특별시에 위치한 식당"이면 그냥 '%서울%'로 하면 되겠지~ 했던 ㅎㅎ
하지만 주소 중간에 약간 ~~~시 ~~~구 서울로~ 라는 데이터가 있었던 건지, '서울%'로 수정하니 통과가 됐다 (질문하기 선생님 감사합니다)
뭐 아무튼~ 왜 기록을 하게 되었냐면 그냥 문득 궁금증이 생겼다
동일한 결과를 내보낸다고 할 때, WHERE과 HAVING 둘 중 어느 것이 더 효율적일까?
일단은 WHERE과 HAVING의 차이를 먼저 구분해야겠지~~ (나는 알지만~~0.<)
HAVING은 그룹 전체에만, 즉 GROUP BY를 사용하여 나타낸 그룹의 결과 집합의 행에,
WHERE은 개별 행에 적용된다.
WHERE은 row 단위로 수행되기에 column 단위로 적용되는 집계 함수(MIN, MAX, COUNT, ...)를 적용할 수 없지만,
HAVING은 group 단위로 수행되기에 집계 함수를 적용할 수 있다.
WHERE은 다이어그램 창의 테이블 또는 테이블 반환 개체의 개별 행에 먼저 적용되고,
그 이후 집합의 행에 HAVING절이 적용된다. (HAVING 사용 위해서는 무조건 GROUP BY 존재해야 함)
아래는 위의 문제를 풀 때 사용한 쿼리이다.
둘 다 수행했을 때 통과되는 것을 확인할 수 있었다.
# HAVING 사용
SELECT INFO.REST_ID, INFO.REST_NAME, INFO.FOOD_TYPE, INFO.FAVORITES, INFO.ADDRESS, ROUND(AVG(RVW.REVIEW_SCORE), 2) SCORE
FROM REST_INFO INFO JOIN REST_REVIEW RVW ON INFO.REST_ID = RVW.REST_ID
GROUP BY INFO.REST_ID, INFO.REST_NAME, INFO.FOOD_TYPE, INFO.FAVORITES, INFO.ADDRESS
HAVING INFO.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, INFO.FAVORITES DESC
# WHERE 사용
SELECT INFO.REST_ID, INFO.REST_NAME, INFO.FOOD_TYPE, INFO.FAVORITES, INFO.ADDRESS, ROUND(AVG(RVW.REVIEW_SCORE), 2) SCORE
FROM REST_INFO INFO JOIN REST_REVIEW RVW ON INFO.REST_ID = RVW.REST_ID
WHERE INFO.ADDRESS LIKE '서울%'
GROUP BY INFO.REST_ID, INFO.REST_NAME, INFO.FOOD_TYPE, INFO.FAVORITES, INFO.ADDRESS
ORDER BY SCORE DESC, INFO.FAVORITES DESC
결과적으로, 그럼 둘 중 어느 것을 사용했을 때 더 효율적일까? 에 대한 답변은...
-> 일단은 집계 함수의 사용 여부를 따져봐야 하고,
-> 해당 속성에 대해 집계 함수를 사용하지 않을 때에는 WHERE절로 먼저 제거하는 것이 더 좋을 것 같다
WHERE절이 더 먼저 수행되기 때문에,
이후의 GROUP BY나 기타 작업들에 있어서의 데이터 양을 미리 줄일 수 있을 것이라고 생각한다.
뭐... 이것도 데이터가 왕왕 크거나 할 때 좀 적용이 되는 문제이지 않을까 싶다
사무실에서 사용하고 있는 쿼리는 보통 어떤 형태로 진행하고 있는지,
큰 데이터에 대한 수행 시간도 한 번 측정해봐야겠다 ㅎㅎ
'Algorithms > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 k진수에서 소수 개수 구하기 (진수 변환, 소수 찾기) (2) | 2024.10.18 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (Python 파이썬) (1) | 2022.07.01 |
[프로그래머스] 124 나라의 숫자 (Python 파이썬) (0) | 2022.06.30 |
[프로그래머스] 오픈채팅방 (Python 파이썬) (0) | 2022.06.30 |
[프로그래머스] 키패드 누르기 (Python 파이썬) (0) | 2022.06.30 |