문제: https://solvesql.com/problems/find-unnecessary-station-2/
solvesql advent 15번 문제
필요 정보
1. 2019년 10월 한 달 동안 정류소에서 발생한 대여/반납 건수 <=
2018년 10월 한 달 동안 정류소에서 발생한 대여/반납 건수*0.5
를 만족하는 정류소 출력
2. 2018년 10월 또는 2019년 10월 한 달간 대여/반납 건수가 0건인 정류소 -> 포함x
3. 출력 컬럼
station
station_id
name
local
출력해야할 레코드의 수는 17개인데 16개가 나옴
다른 사람의 정답보면서 맞춰보고자 함
station_id = 2284
name = CJ오쇼핑앞
local = 서초구
의 값이 없음
rent_at 비교
2018-10-31 의 값이 없음
-> rent_at BETWEEN '2018-10-01' AND '2018-10-31'으로 작성하였기 때문...
BETWEEN은 이상, 미만의 값이기 때문에 위처럼 설정 시 2018-10-30까지만 나옴
WITH rent_s AS (-- 대여 정류소
SELECT
rent_station_id
, COUNT(CASE WHEN substr(rent_at, 1, 7) = '2019-10' THEN rent_station_id END) rent_2019
, COUNT(CASE WHEN substr(rent_at, 1, 7) = '2018-10' THEN rent_station_id END) rent_2018
FROM rental_history r
GROUP BY rent_station_id
), return_s AS (-- 반납 정류소
SELECT
return_station_id
, COUNT(CASE WHEN return_at BETWEEN '2019-10-01' AND '2019-11-01' THEN return_station_id END) return_2019
, COUNT(CASE WHEN return_at BETWEEN '2018-10-01' AND '2018-11-01' THEN return_station_id END) return_2018
FROM rental_history r
GROUP BY return_station_id
)
SELECT
station_id
, name
, local
, ROUND((rent_2019 + return_2019)/CAST((rent_2018 + return_2018)AS REAL)*100,2) usage_pct
FROM station
LEFT OUTER JOIN rent_s ON station.station_id = rent_s.rent_station_id
LEFT OUTER JOIN return_s ON station.station_id = return_s.return_station_id
WHERE (rent_2019 + return_2019) <= (rent_2018 + return_2018)*0.5
AND ROUND((rent_2019 + return_2019)/CAST((rent_2018 + return_2018)AS REAL)*100,2) != 0