cachaito
3/26/2019 - 3:33 PM

Performant approach to filter needed data from tables

SELECT 
    driver.id,
    driver.name,
    COUNT(*) AS less_than_3km_to_customer_distance_denials
FROM taxijakt.wave_driver_denied_orders denied
JOIN taxijakt.wave_drivers driver ON 
    driver.id = denied.driver_id 
    AND driver.verified is NOT NULL 
    AND driver.country_code = 'PL'
JOIN taxijakt.wave_driver_order_distance distance ON 
    distance.driver_id = denied.driver_id 
    AND distance.order_id = denied.order_id 
    AND distance.road_distance < 3000
WHERE denied.timestamp >= current_timestamp() - INTERVAL 40 DAY
GROUP BY 1, 2
ORDER BY 2
SELECT MIN(id) as driver_id, name
    SUM(DISTANCE.road_distance < 3000) AS less_than_3km_to_customer_distance_denials
FROM taxijakt.wave_drivers DRIVERS
JOIN (
   SELECT driver_id, order_id
   FROM taxijakt.wave_driver_denied_orders
   WHERE DATE(timestamp)  >= CURRENT_DATE() - INTERVAL 40 DAY
) DENIALS ON DENIALS.driver_id = DRIVERS.id
JOIN (
   SELECT driver_id, order_id, road_distance
   FROM taxijakt.wave_driver_order_distance
) DISTANCE ON DISTANCE.driver_id = DENIALS.driver_id AND DISTANCE.order_id = DENIALS.order_id
WHERE verified is NOT NULL AND country_code = 'PL'
GROUP BY id
ORDER BY 2