Flight Data — Cancellation Rates by Carrier and Cause
Flight Data benchmark · all Flight Data queries
Cancellation frequency and reason breakdown by carrier
Representative SQL
Rendered in the benchmark’s native SQL with default parameters (no dialect translation available).
SELECT f.reporting_airline, a.name AS airline_name, COUNT(*) AS total_flights, SUM(CASE WHEN f.cancelled = 1 THEN 1 ELSE 0 END) AS total_cancelled, ROUND(100.0 * SUM(CASE WHEN f.cancelled = 1 THEN 1 ELSE 0 END) / COUNT(*), 3) AS cancellation_rate_pct, SUM(CASE WHEN f.cancellation_code = 'A' THEN 1 ELSE 0 END) AS carrier_cancellations, SUM(CASE WHEN f.cancellation_code = 'B' THEN 1 ELSE 0 END) AS weather_cancellations, SUM(CASE WHEN f.cancellation_code = 'C' THEN 1 ELSE 0 END) AS nas_cancellations, SUM(CASE WHEN f.cancellation_code = 'D' THEN 1 ELSE 0 END) AS security_cancellationsFROM flights AS fLEFT JOIN airlines AS a ON f.reporting_airline = a.codeWHERE f.flight_date >= '2021-08-01' AND f.flight_date < '2025-01-01'GROUP BY f.reporting_airline, a.nameHAVING COUNT(*) >= 100ORDER BY cancellation_rate_pct DESC, f.reporting_airlineRepresentative DataFrame
Expression family (Polars, PySpark, DataFusion), default parameters.
def cancellation_rate_expression_impl(ctx: DataFrameContext) -> Any: flights = ctx.get_table("flights") col, lit = ctx.col, ctx.lit
return ( flights.join(_airline_names(ctx), left_on="reporting_airline", right_on="a_code", how="left") .filter(_date_condition(col, lit)) .with_columns( (col("cancelled") == lit(1)).cast(int).alias("_cancelled"), (col("cancellation_code") == lit("A")).cast(int).alias("_code_a"), (col("cancellation_code") == lit("B")).cast(int).alias("_code_b"), (col("cancellation_code") == lit("C")).cast(int).alias("_code_c"), (col("cancellation_code") == lit("D")).cast(int).alias("_code_d"), ) .group_by("reporting_airline", "airline_name") .agg( col("flight_id").count().alias("total_flights"), col("_cancelled").sum().alias("total_cancelled"), col("_code_a").sum().alias("carrier_cancellations"), col("_code_b").sum().alias("weather_cancellations"), col("_code_c").sum().alias("nas_cancellations"), col("_code_d").sum().alias("security_cancellations"), ) .filter(col("total_flights") >= lit(100)) .with_columns( _round_half_away(ctx, lit(100.0) * col("total_cancelled") / col("total_flights"), 3).alias( "cancellation_rate_pct" ) ) .select( "reporting_airline", "airline_name", "total_flights", "total_cancelled", "cancellation_rate_pct", "carrier_cancellations", "weather_cancellations", "nas_cancellations", "security_cancellations", ) .sort(["cancellation_rate_pct", "reporting_airline"], descending=[True, False]) )Get the exact query for your run
The blocks above are representative. To get the precise statement a specific platform runs at a specific scale, substitute your own values:
from benchbox import FlightData
bench = FlightData(scale_factor=1.0) # your scale factorprint(bench.get_queries()['cancellation-rate'])For the DataFrame form:
from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('flightdata', 'cancellation-rate', family="expression").source) # or family="pandas"Source
Query text: benchbox/core/flightdata/queries.py