Contents
내가 작성한 쿼리
상반기와 하반기의 평균 연비를 비교하여 연비가 개선된 운전자를 찾기 위한 해결책을 작성하세요.
* distance_km / fuel_consumed로 연료 효율 계산
* 상반기: 1월부터 6월까지, 하반기: 7월부터 12월까지
* 상,하반기에 모두 여행한 운전자만 포함하세요
* 효율성 향상을 (second_half_avg - first_half_avg)로 계산합니다
* 모든 결과를 소수점 이하 두 자리로 반올림하세요
결과 테이블을 내림차순으로 효율성 향상에 따라 정렬한 다음,
드라이버 이름을 오름차순으로 정렬하여 반환합니다.
내가 작성한 쿼리
MySQL, Oracle
WITH
-- 상반기 운전자 id, 연비 CTE
FirstHalf AS (
SELECT
driver_id,
AVG(distance_km / fuel_consumed) AS first_half_avg
FROM trips
WHERE EXTRACT(MONTH FROM trip_date) BETWEEN 1 AND 6
GROUP BY driver_id
),
-- 하반기 운전자 id, 연비 CTE
SecondHalf AS (
SELECT
driver_id,
AVG(distance_km / fuel_consumed) AS second_half_avg
FROM trips
WHERE EXTRACT(MONTH FROM trip_date) BETWEEN 7 AND 12
GROUP BY driver_id
),
-- 상, 하반기 운전자 id, 연비, 연비 효율 CTE
Efficiency AS (
SELECT
f.driver_id,
f.first_half_avg,
s.second_half_avg,
s.second_half_avg - f.first_half_avg AS efficiency_improvement
FROM FirstHalf f
JOIN SecondHalf s ON f.driver_id = s.driver_id
)
SELECT
d.driver_id,
d.driver_name,
ROUND(e.first_half_avg, 2) AS first_half_avg,
ROUND(e.second_half_avg, 2) AS second_half_avg,
ROUND(e.efficiency_improvement, 2) AS efficiency_improvement
FROM Efficiency e
JOIN drivers d ON e.driver_id = d.driver_id
WHERE e.efficiency_improvement > 0
ORDER BY efficiency_improvement DESC, driver_name ASC;
Share article