[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기

2023. 5. 31. 11:50· DB/SQL
목차
  1. [문제]
  2. [풀이]
  3. [피드백]

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/157342

[풀이]

1. CAR_ID와 각 행별 대여기간을 구한 인라인 뷰 테이블을 만든다. (from 절에서 서브쿼리)

2. 이후 group by로 car_id별로 묶은 후 평균 대여일을 구하는데

3. 그 결과에서 having으로 7일 이상인 데이터만 필터한다.

4. select문에서 그 평균 값을 ROUND로 반올림 해주고

5. 정렬해준다.

select CAR_ID, ROUND(AVG(dif),1) as AVERAGE_DURATION
from
(select CAR_ID,  (datediff(END_DATE,START_DATE)+1) as dif  from CAR_RENTAL_COMPANY_RENTAL_HISTORY ) T
group by T.CAR_ID 
having  AVG(dif) >= 7
order by AVERAGE_DURATION desc, CAR_ID desc

 

[피드백]

<날짜 차이 구하기>

1. 두 날짜의 차이를 일수로 반환

 

[Mysql] : DATEDIFF(날짜1, 날짜2)

SELECT DATEDIFF(END_DATE,START_DATE); -- 반환값 : 365

 

[Postgresql] : 그냥 두 date를 빼면 

select end_date - start_date::date as diff from table  -- 반환값: 365

 

 

2. 두 날짜의 차이를 선택한 단위로 반환

 

[Mysql] : TIMESTAMPDIFF(단위,날짜1, 날짜2)

SELECT TIMESTAMPDIFF(단위, 날짜1, 날짜2);

- 단위: year(년), quarter(분기),  month(월), week(주), day(일), hour(시) , minute(분), second(초)

- 예제

SELECT TIMESTAMPDIFF(SECOND, '2022-02-07', '203-09-25');

 

[Postgresql]   

EXTRACT(field FROM source)

- field (단위) : century(세기), year(년), quarter(분기),  month(월), week(주), day(일), hour(시) , minute(분), second(초) 

- source: timestamp, time, or interval 타입 이여야 함

- 예제

 
SELECT end_date - start_date::date as diff FROM test -- 두 기간 간의 날짜 차이(2022-09-25 - 2023-02-07)

SELECT EXTRACT(day FROM end_date::TIMESTAMP ) - EXTRACT(day FROM start_date::TIMESTAMP ) from test; -- 단순히 두 일 끼리의 차이 (25-07)
SELECT EXTRACT(YEAR FROM end_date) - EXTRACT(YEAR FROM start_date) from test; -- 년 차이 구하기 (2023-2022)
SELECT EXTRACT(MONTH FROM end_date::TIMESTAMP ) - EXTRACT(MONTH FROM start_date::TIMESTAMP ) from test; -- 월 차이 (09-02)
SELECT EXTRACT(QUARTER FROM end_date::TIMESTAMP ) - EXTRACT(QUARTER FROM start_date::TIMESTAMP ) from test; -- 분기 차이

 

 

<소수점 올림,버림>

ROUND()

  select ROUND(123.567,-1), ROUND(123.567,-2), ROUND(123.567,0), ROUND(123.567,1), ROUND(123.567,2);

CEILING()

 select CEILING(123.567)

 


참고자료

mysql 공식문서 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_datediff

postgresql 공식문서 : https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'DB > SQL' 카테고리의 다른 글

[SQL]변수  (0) 2023.05.31
[SQL] 데이터 형식, 형변환 (mysql)  (0) 2023.05.31
[SQL] 행 입력, 수정, 삭제 CRUD  (0) 2023.05.30
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력  (0) 2023.05.30
[SQL] join, on  (0) 2023.05.25
  1. [문제]
  2. [풀이]
  3. [피드백]
'DB/SQL' 카테고리의 다른 글
  • [SQL]변수
  • [SQL] 데이터 형식, 형변환 (mysql)
  • [SQL] 행 입력, 수정, 삭제 CRUD
  • [SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력
journey-dev
journey-dev
journey-dev
journey-dev
journey-dev
전체
오늘
어제
  • 분류 전체보기 (65)
    • 프론트엔드 (44)
      • JS (8)
      • React (8)
      • vue (9)
      • Typescript (2)
    • CS (4)
      • 자료구조&알고리즘 (2)
      • 네트워크 (2)
    • 개발서적 (1)
      • 코어 자바스크립트 (0)
      • 프론트엔드 성능 최적화 가이드 (1)
    • DB (11)
      • SQL (11)
    • GIT (0)
    • GIS (3)
    • 개발일기 (2)
    • ing (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 일단 시작해라. 나중에 완벽해지면 된다.

인기 글

태그

  • 리액트 복기하기!

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
journey-dev
[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.