@@ -1395,12 +1395,12 @@ fn clickhouse_edge_overview_query(
13951395 format ! (
13961396 "\
13971397 SELECT \
1398- ifNull(sum(request_count), 0) AS request_count, \
1399- ifNull(sum(bytes_served), 0) AS bytes_served, \
1400- ifNull(sum(cache_hit_count), 0) AS cache_hit_count, \
1401- ifNull(sum(error_count), 0) AS error_count, \
1402- if(isFinite(avgIf(request_duration_p50_ms, request_count > 0)), avgIf(request_duration_p50_ms, request_count > 0), 0) AS request_duration_p50_ms, \
1403- if(isFinite(avgIf(request_duration_p95_ms, request_count > 0)), avgIf(request_duration_p95_ms, request_count > 0), 0) AS request_duration_p95_ms \
1398+ ifNull(sum(edge_rollups. request_count), 0) AS request_count, \
1399+ ifNull(sum(edge_rollups. bytes_served), 0) AS bytes_served, \
1400+ ifNull(sum(edge_rollups. cache_hit_count), 0) AS cache_hit_count, \
1401+ ifNull(sum(edge_rollups. error_count), 0) AS error_count, \
1402+ if(isFinite(avgIf(edge_rollups. request_duration_p50_ms, edge_rollups. request_count > 0)), avgIf(edge_rollups. request_duration_p50_ms, edge_rollups. request_count > 0), 0) AS request_duration_p50_ms, \
1403+ if(isFinite(avgIf(edge_rollups. request_duration_p95_ms, edge_rollups. request_count > 0)), avgIf(edge_rollups. request_duration_p95_ms, edge_rollups. request_count > 0), 0) AS request_duration_p95_ms \
14041404 FROM ( \
14051405 SELECT \
14061406 bucket_start, \
@@ -1416,7 +1416,7 @@ fn clickhouse_edge_overview_query(
14161416 AND bucket_start >= fromUnixTimestamp64Milli({}) \
14171417 AND bucket_start < fromUnixTimestamp64Milli({}) \
14181418 GROUP BY bucket_start, asset_id \
1419- ) \
1419+ ) AS edge_rollups \
14201420 FORMAT JSONEachRow",
14211421 window. started_at. timestamp_millis( ) ,
14221422 window. ended_at. timestamp_millis( ) ,
@@ -1430,16 +1430,16 @@ fn clickhouse_player_overview_query(
14301430 format ! (
14311431 "\
14321432 SELECT \
1433- ifNull(sum(sessions), 0) AS sessions, \
1434- ifNull(sum(views), 0) AS views, \
1435- ifNull(sum(startup_failures), 0) AS startup_failures, \
1436- ifNull(sum(watch_time_ms), 0) AS watch_time_ms, \
1437- ifNull(sum(stalled_sessions), 0) AS stalled_sessions, \
1438- ifNull(sum(stall_count), 0) AS stall_count, \
1439- ifNull(sum(stall_duration_ms), 0) AS stall_duration_ms, \
1440- ifNull(sum(playback_failures), 0) AS playback_failures, \
1441- if(isFinite(avgIf(first_frame_p50_ms, views > 0)), avgIf(first_frame_p50_ms, views > 0), 0) AS first_frame_p50_ms, \
1442- if(isFinite(avgIf(first_frame_p95_ms, views > 0)), avgIf(first_frame_p95_ms, views > 0), 0) AS first_frame_p95_ms \
1433+ ifNull(sum(player_rollups. sessions), 0) AS sessions, \
1434+ ifNull(sum(player_rollups. views), 0) AS views, \
1435+ ifNull(sum(player_rollups. startup_failures), 0) AS startup_failures, \
1436+ ifNull(sum(player_rollups. watch_time_ms), 0) AS watch_time_ms, \
1437+ ifNull(sum(player_rollups. stalled_sessions), 0) AS stalled_sessions, \
1438+ ifNull(sum(player_rollups. stall_count), 0) AS stall_count, \
1439+ ifNull(sum(player_rollups. stall_duration_ms), 0) AS stall_duration_ms, \
1440+ ifNull(sum(player_rollups. playback_failures), 0) AS playback_failures, \
1441+ if(isFinite(avgIf(player_rollups. first_frame_p50_ms, player_rollups. views > 0)), avgIf(player_rollups. first_frame_p50_ms, player_rollups. views > 0), 0) AS first_frame_p50_ms, \
1442+ if(isFinite(avgIf(player_rollups. first_frame_p95_ms, player_rollups. views > 0)), avgIf(player_rollups. first_frame_p95_ms, player_rollups. views > 0), 0) AS first_frame_p95_ms \
14431443 FROM ( \
14441444 SELECT \
14451445 bucket_start, \
@@ -1459,7 +1459,7 @@ fn clickhouse_player_overview_query(
14591459 AND bucket_start >= fromUnixTimestamp64Milli({}) \
14601460 AND bucket_start < fromUnixTimestamp64Milli({}) \
14611461 GROUP BY bucket_start, asset_id \
1462- ) \
1462+ ) AS player_rollups \
14631463 FORMAT JSONEachRow",
14641464 window. started_at. timestamp_millis( ) ,
14651465 window. ended_at. timestamp_millis( ) ,
@@ -1893,6 +1893,40 @@ mod tests {
18931893 assert ! ( query. contains( "FORMAT JSONEachRow" ) ) ;
18941894 }
18951895
1896+ #[ test]
1897+ fn overview_queries_do_not_reuse_aggregate_aliases_in_avgif_conditions ( ) {
1898+ let window = NormalizedPlaybackAnalyticsWindow {
1899+ started_at : DateTime :: parse_from_rfc3339 ( "2026-06-13T11:00:00.000Z" )
1900+ . unwrap ( )
1901+ . with_timezone ( & Utc ) ,
1902+ ended_at : DateTime :: parse_from_rfc3339 ( "2026-06-13T12:00:00.000Z" )
1903+ . unwrap ( )
1904+ . with_timezone ( & Utc ) ,
1905+ } ;
1906+
1907+ let edge_query =
1908+ clickhouse_edge_overview_query ( "00000000-0000-0000-0000-000000000001" , window) ;
1909+ assert ! ( edge_query. contains( "AS edge_rollups" ) ) ;
1910+ assert ! ( edge_query. contains(
1911+ "avgIf(edge_rollups.request_duration_p50_ms, edge_rollups.request_count > 0)"
1912+ ) ) ;
1913+ assert ! ( edge_query. contains(
1914+ "avgIf(edge_rollups.request_duration_p95_ms, edge_rollups.request_count > 0)"
1915+ ) ) ;
1916+
1917+ let player_query =
1918+ clickhouse_player_overview_query ( "00000000-0000-0000-0000-000000000001" , window) ;
1919+ assert ! ( player_query. contains( "AS player_rollups" ) ) ;
1920+ assert ! (
1921+ player_query
1922+ . contains( "avgIf(player_rollups.first_frame_p50_ms, player_rollups.views > 0)" )
1923+ ) ;
1924+ assert ! (
1925+ player_query
1926+ . contains( "avgIf(player_rollups.first_frame_p95_ms, player_rollups.views > 0)" )
1927+ ) ;
1928+ }
1929+
18961930 #[ test]
18971931 fn clickhouse_rows_use_artifact_billing_metadata_for_delivery ( ) {
18981932 let ingested_at = DateTime :: parse_from_rfc3339 ( "2026-06-13T12:00:01.000Z" )
0 commit comments