Home

3601. Find Drivers with Improved Fuel Efficiency

Tables

erDiagram
	drivers {
		driver_id int PK
		driver_name varchar
	}
	trips {
		trip_id int PK
		driver_id int FK
		trip_date date
		distance_km deciaml
		fuel_consumed decimal
	}
	drivers || -- o{ trips : "trip info"
Mermaid
복사

Question

Write a solution to find drivers whose fuel efficiency has improved by comparing their average fuel efficiency in the first half of the year with the second half of the year.
•
Calculate fuel efficiency as distance_km / fuel_consumed for each trip
•
First half: January to June, Second half: July to December
•
Only include drivers who have trips in both halves of the year
•
Calculate the efficiency improvement as (second_half_avg - first_half_avg)
•
Round all results to 2 decimal places
Return the result table ordered by efficiency improvement in descending order, then by driver name in ascending order.
The result format is in the following example.

DataFlow

•
first half / second half -> group by date
•
sum(km), sum(feul) -> groupby driver_id

Answer

SELECT t1.driver_id, d.driver_name, ROUND(t1.first_trip, 2) AS first_half_avg, ROUND(t2.second_trip, 2) AS second_half_avg, ROUND(t2.second_trip - t1.first_trip, 2) AS efficiency_improvement FROM ( SELECT driver_id, AVG(distance_km/fuel_consumed) AS first_trip FROM trips WHERE trip_date < "2023-07-01" GROUP BY driver_id ) t1 INNER JOIN ( SELECT driver_id, AVG(distance_km/fuel_consumed) AS second_trip FROM trips WHERE trip_date >= "2023-07-01" GROUP BY driver_id ) t2 ON t1.driver_id = t2.driver_id AND t2.second_trip > t1.first_trip INNER JOIN drivers d ON t1.driver_id = d.driver_id ORDER BY efficiency_improvement DESC, d.driver_name ASC;
SQL
복사
INNER JOIN 으로 전반기 / 후반기 모두 있는 driver만 추출 효율 상승 분이니까 전반기가 큰 driver만 추출