728x90
https://school.programmers.co.kr/learn/courses/30/lessons/157342
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SQL 문제는 가끔 기업 코딩테스트에서도 출제되고 실제로 백엔드 개발자라면 쿼리 작성할 일이 반드시 생기기 때문에 공부하기로 했다.
* 주요 날짜 관련 함수 *
- DATE_ADD() : 날짜, 시간 더하기
- DATE_SUB() : 날짜, 시간 빼기
- DATEDIFF() : 두 기간 사이의 일수 계산
- TIMEDIFF() : 두 기간 사이의 시간 계산
- PERIOD_DIFF() : 두 기간 사이의 개월 수 계산
- TIMESTAMPDIFF() : 두 기간 사이의 시간 계산
여기서 사용해야하는 함수는 DATEDIFF 이다. 31일 20일 이라면 11이 출력된다. 두 날짜를 모두 포함하는 날짜 수를 새려면 + 1을 해야한다.
그리고 이 문제처럼 무언가 하나의 기준을 잡고 그 하나의 기준끼리 연산해야한다면 GROUPBY를 사용해야한다. 그룹바이는 한 그룹으로 묶어 그것을 연산하는 식으로 사용된다. 이 문제에서는 평균이 사용되었다.
SUM, AVG, MIN, MAX, COUNT 가 있다. 이 문제에서는 AVG가 사용된다.
그리고 HAVING 절을 사용하여 WHERE처럼 사용하여 조건을 만족시킨다.
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE, START_DATE) + 1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC
'프로그래머스 풀이 > Lv 2' 카테고리의 다른 글
프로그래머스 - 소수 찾기 (Java) (0) | 2024.05.01 |
---|---|
프로그래머스 - 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.02.27 |
프로그래머스 - [1차]뉴스 클러스터링 (C++) (0) | 2023.12.14 |
프로그래머스 - 거리두기 확인하기 (C++) (0) | 2023.11.23 |
프로그래머스 - 피로도 (C++) (0) | 2023.11.04 |