pythonspark.sql("""
WITH per_pair AS (
SELECT origin, carrier,
count(*) AS flights,
round(avg(dep_delay), 2) AS avg_delay
FROM flights
WHERE dep_delay IS NOT NULL
GROUP BY origin, carrier
HAVING count(*) > 5000
),
ranked AS (
SELECT per_pair.*,
rank() OVER (PARTITION BY origin ORDER BY avg_delay DESC) AS worst_rank
FROM per_pair
)
SELECT origin, carrier, flights, avg_delay
FROM ranked WHERE worst_rank = 1
ORDER BY avg_delay DESC
LIMIT 10
""").show()
# A GROUP BY collapses the rows, and the answer is a whole row : the worst carrier at each airport.