Skip to content

Commit f71aa13

Browse files
authored
Additional Queries for Page Weight (#4253)
* adds two new queries to find out % urls passing CWV * Cleaned up and refactored for readbiliy by @tunetheweb * no INP as pass, and cleanup, as review by @tunetheweb
1 parent bf15348 commit f71aa13

2 files changed

Lines changed: 234 additions & 0 deletions

File tree

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
WITH base_data AS (
2+
SELECT
3+
date,
4+
client,
5+
is_root_page,
6+
CAST(JSON_VALUE(summary.bytesTotal) AS INT64) AS bytes_total,
7+
-- these are page level CrUX metrics, pages may not have all / any metrics available, but do represent the user experience of the measured page weight vs. origin.
8+
CAST(JSON_VALUE(summary.crux.metrics.largest_contentful_paint.percentiles.p75) AS FLOAT64) / 1000 AS lcp,
9+
CAST(JSON_VALUE(summary.crux.metrics.cumulative_layout_shift.percentiles.p75) AS FLOAT64) AS cls,
10+
CAST(JSON_VALUE(summary.crux.metrics.interaction_to_next_paint.percentiles.p75) AS FLOAT64) AS inp,
11+
CAST(JSON_VALUE(summary.crux.metrics.first_contentful_paint.percentiles.p75) AS FLOAT64) / 1000 AS fcp,
12+
CAST(JSON_VALUE(summary.crux.metrics.experimental_time_to_first_byte.percentiles.p75) AS FLOAT64) AS ttfb
13+
FROM
14+
`httparchive.crawl.pages`
15+
WHERE
16+
date = '2025-07-01'
17+
),
18+
19+
categorised_data AS (
20+
SELECT
21+
date,
22+
client,
23+
is_root_page,
24+
bytes_total,
25+
CASE
26+
WHEN bytes_total <= 1024.0 * 1024.0 * 1 THEN '0mb-1mb'
27+
WHEN bytes_total > 1024.0 * 1024.0 * 1 AND bytes_total <= 1024.0 * 1024.0 * 2 THEN '1mb-2mb'
28+
WHEN bytes_total > 1024.0 * 1024.0 * 2 AND bytes_total <= 1024.0 * 1024.0 * 3 THEN '2mb-3mb'
29+
WHEN bytes_total > 1024.0 * 1024.0 * 3 AND bytes_total <= 1024.0 * 1024.0 * 4 THEN '3mb-4mb'
30+
WHEN bytes_total > 1024.0 * 1024.0 * 4 AND bytes_total <= 1024.0 * 1024.0 * 5 THEN '4mb-5mb'
31+
WHEN bytes_total > 1024.0 * 1024.0 * 5 THEN '>5mb'
32+
ELSE NULL
33+
END AS category,
34+
-- these are page level CrUX metrics, pages may not have all / any metrics available, but do represent the user experience of the measured page weight vs. origin.
35+
CASE
36+
WHEN lcp <= 2.5 THEN 'good'
37+
WHEN lcp > 2.5 AND lcp <= 4.0 THEN 'ni'
38+
WHEN lcp > 4.0 THEN 'poor'
39+
ELSE NULL
40+
END AS lcp_category,
41+
CASE
42+
WHEN cls <= 0.1 THEN 'good'
43+
WHEN cls > 0.1 AND cls <= 0.25 THEN 'ni'
44+
WHEN cls > 0.25 THEN 'poor'
45+
ELSE NULL
46+
END AS cls_category,
47+
CASE
48+
WHEN inp <= 200 THEN 'good'
49+
WHEN inp > 200 AND inp <= 500 THEN 'ni'
50+
WHEN inp > 500 THEN 'poor'
51+
ELSE NULL
52+
END AS inp_category,
53+
CASE
54+
WHEN fcp <= 1.8 THEN 'good'
55+
WHEN fcp > 1.8 AND fcp <= 3.0 THEN 'ni'
56+
WHEN fcp > 3.0 THEN 'poor'
57+
ELSE NULL
58+
END AS fcp_category,
59+
CASE
60+
WHEN ttfb <= 800 THEN 'good'
61+
WHEN ttfb > 800 AND ttfb <= 1800 THEN 'ni'
62+
WHEN ttfb > 1800 THEN 'poor'
63+
ELSE NULL
64+
END AS ttfb_category
65+
FROM
66+
base_data
67+
)
68+
69+
SELECT
70+
client,
71+
is_root_page,
72+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND lcp_category = 'good'), COUNTIF(category = '0mb-1mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_1mb_and_below,
73+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND lcp_category = 'ni'), COUNTIF(category = '0mb-1mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_1mb_and_below,
74+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND lcp_category = 'poor'), COUNTIF(category = '0mb-1mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_1mb_and_below,
75+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND lcp_category = 'good'), COUNTIF(category = '1mb-2mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_1mb_to_2mb,
76+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND lcp_category = 'ni'), COUNTIF(category = '1mb-2mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_1mb_to_2mb,
77+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND lcp_category = 'poor'), COUNTIF(category = '1mb-2mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_1mb_to_2mb,
78+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND lcp_category = 'good'), COUNTIF(category = '2mb-3mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_2mb_to_3mb,
79+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND lcp_category = 'ni'), COUNTIF(category = '2mb-3mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_2mb_to_3mb,
80+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND lcp_category = 'poor'), COUNTIF(category = '2mb-3mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_2mb_to_3mb,
81+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND lcp_category = 'good'), COUNTIF(category = '3mb-4mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_3mb_to_4mb,
82+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND lcp_category = 'ni'), COUNTIF(category = '3mb-4mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_3mb_to_4mb,
83+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND lcp_category = 'poor'), COUNTIF(category = '3mb-4mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_3mb_to_4mb,
84+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND lcp_category = 'good'), COUNTIF(category = '4mb-5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_4mb_to_5mb,
85+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND lcp_category = 'ni'), COUNTIF(category = '4mb-5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_4mb_to_5mb,
86+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND lcp_category = 'poor'), COUNTIF(category = '4mb-5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_4mb_to_5mb,
87+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND lcp_category = 'good'), COUNTIF(category = '>5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_good_pct_5mb_and_above,
88+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND lcp_category = 'ni'), COUNTIF(category = '>5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_ni_pct_5mb_and_above,
89+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND lcp_category = 'poor'), COUNTIF(category = '>5mb' AND lcp_category IS NOT NULL)), 4) AS lcp_poor_pct_5mb_and_above,
90+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND cls_category = 'good'), COUNTIF(category = '0mb-1mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_1mb_and_below,
91+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND cls_category = 'ni'), COUNTIF(category = '0mb-1mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_1mb_and_below,
92+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND cls_category = 'poor'), COUNTIF(category = '0mb-1mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_1mb_and_below,
93+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND cls_category = 'good'), COUNTIF(category = '1mb-2mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_1mb_to_2mb,
94+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND cls_category = 'ni'), COUNTIF(category = '1mb-2mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_1mb_to_2mb,
95+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND cls_category = 'poor'), COUNTIF(category = '1mb-2mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_1mb_to_2mb,
96+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND cls_category = 'good'), COUNTIF(category = '2mb-3mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_2mb_to_3mb,
97+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND cls_category = 'ni'), COUNTIF(category = '2mb-3mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_2mb_to_3mb,
98+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND cls_category = 'poor'), COUNTIF(category = '2mb-3mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_2mb_to_3mb,
99+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND cls_category = 'good'), COUNTIF(category = '3mb-4mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_3mb_to_4mb,
100+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND cls_category = 'ni'), COUNTIF(category = '3mb-4mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_3mb_to_4mb,
101+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND cls_category = 'poor'), COUNTIF(category = '3mb-4mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_3mb_to_4mb,
102+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND cls_category = 'good'), COUNTIF(category = '4mb-5mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_4mb_to_5mb,
103+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND cls_category = 'ni'), COUNTIF(category = '4mb-5mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_4mb_to_5mb,
104+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND cls_category = 'poor'), COUNTIF(category = '4mb-5mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_4mb_to_5mb,
105+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND cls_category = 'good'), COUNTIF(category = '>5mb' AND cls_category IS NOT NULL)), 4) AS cls_good_pct_5mb_and_above,
106+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND cls_category = 'ni'), COUNTIF(category = '>5mb' AND cls_category IS NOT NULL)), 4) AS cls_ni_pct_5mb_and_above,
107+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND cls_category = 'poor'), COUNTIF(category = '>5mb' AND cls_category IS NOT NULL)), 4) AS cls_poor_pct_5mb_and_above,
108+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND inp_category = 'good'), COUNTIF(category = '0mb-1mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_1mb_and_below,
109+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND inp_category = 'ni'), COUNTIF(category = '0mb-1mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_1mb_and_below,
110+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND inp_category = 'poor'), COUNTIF(category = '0mb-1mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_1mb_and_below,
111+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND inp_category = 'good'), COUNTIF(category = '1mb-2mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_1mb_to_2mb,
112+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND inp_category = 'ni'), COUNTIF(category = '1mb-2mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_1mb_to_2mb,
113+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND inp_category = 'poor'), COUNTIF(category = '1mb-2mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_1mb_to_2mb,
114+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND inp_category = 'good'), COUNTIF(category = '2mb-3mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_2mb_to_3mb,
115+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND inp_category = 'ni'), COUNTIF(category = '2mb-3mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_2mb_to_3mb,
116+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND inp_category = 'poor'), COUNTIF(category = '2mb-3mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_2mb_to_3mb,
117+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND inp_category = 'good'), COUNTIF(category = '3mb-4mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_3mb_to_4mb,
118+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND inp_category = 'ni'), COUNTIF(category = '3mb-4mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_3mb_to_4mb,
119+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND inp_category = 'poor'), COUNTIF(category = '3mb-4mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_3mb_to_4mb,
120+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND inp_category = 'good'), COUNTIF(category = '4mb-5mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_4mb_to_5mb,
121+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND inp_category = 'ni'), COUNTIF(category = '4mb-5mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_4mb_to_5mb,
122+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND inp_category = 'poor'), COUNTIF(category = '4mb-5mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_4mb_to_5mb,
123+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND inp_category = 'good'), COUNTIF(category = '>5mb' AND inp_category IS NOT NULL)), 4) AS inp_good_pct_5mb_and_above,
124+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND inp_category = 'ni'), COUNTIF(category = '>5mb' AND inp_category IS NOT NULL)), 4) AS inp_ni_pct_5mb_and_above,
125+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND inp_category = 'poor'), COUNTIF(category = '>5mb' AND inp_category IS NOT NULL)), 4) AS inp_poor_pct_5mb_and_above,
126+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND fcp_category = 'good'), COUNTIF(category = '0mb-1mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_1mb_and_below,
127+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND fcp_category = 'ni'), COUNTIF(category = '0mb-1mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_1mb_and_below,
128+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND fcp_category = 'poor'), COUNTIF(category = '0mb-1mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_1mb_and_below,
129+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND fcp_category = 'good'), COUNTIF(category = '1mb-2mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_1mb_to_2mb,
130+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND fcp_category = 'ni'), COUNTIF(category = '1mb-2mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_1mb_to_2mb,
131+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND fcp_category = 'poor'), COUNTIF(category = '1mb-2mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_1mb_to_2mb,
132+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND fcp_category = 'good'), COUNTIF(category = '2mb-3mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_2mb_to_3mb,
133+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND fcp_category = 'ni'), COUNTIF(category = '2mb-3mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_2mb_to_3mb,
134+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND fcp_category = 'poor'), COUNTIF(category = '2mb-3mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_2mb_to_3mb,
135+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND fcp_category = 'good'), COUNTIF(category = '3mb-4mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_3mb_to_4mb,
136+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND fcp_category = 'ni'), COUNTIF(category = '3mb-4mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_3mb_to_4mb,
137+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND fcp_category = 'poor'), COUNTIF(category = '3mb-4mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_3mb_to_4mb,
138+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND fcp_category = 'good'), COUNTIF(category = '4mb-5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_4mb_to_5mb,
139+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND fcp_category = 'ni'), COUNTIF(category = '4mb-5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_4mb_to_5mb,
140+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND fcp_category = 'poor'), COUNTIF(category = '4mb-5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_4mb_to_5mb,
141+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND fcp_category = 'good'), COUNTIF(category = '>5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_good_pct_5mb_and_above,
142+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND fcp_category = 'ni'), COUNTIF(category = '>5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_ni_pct_5mb_and_above,
143+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND fcp_category = 'poor'), COUNTIF(category = '>5mb' AND fcp_category IS NOT NULL)), 4) AS fcp_poor_pct_5mb_and_above,
144+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND ttfb_category = 'good'), COUNTIF(category = '0mb-1mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_1mb_and_below,
145+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND ttfb_category = 'ni'), COUNTIF(category = '0mb-1mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_1mb_and_below,
146+
ROUND(SAFE_DIVIDE(COUNTIF(category = '0mb-1mb' AND ttfb_category = 'poor'), COUNTIF(category = '0mb-1mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_1mb_and_below,
147+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND ttfb_category = 'good'), COUNTIF(category = '1mb-2mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_1mb_to_2mb,
148+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND ttfb_category = 'ni'), COUNTIF(category = '1mb-2mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_1mb_to_2mb,
149+
ROUND(SAFE_DIVIDE(COUNTIF(category = '1mb-2mb' AND ttfb_category = 'poor'), COUNTIF(category = '1mb-2mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_1mb_to_2mb,
150+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND ttfb_category = 'good'), COUNTIF(category = '2mb-3mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_2mb_to_3mb,
151+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND ttfb_category = 'ni'), COUNTIF(category = '2mb-3mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_2mb_to_3mb,
152+
ROUND(SAFE_DIVIDE(COUNTIF(category = '2mb-3mb' AND ttfb_category = 'poor'), COUNTIF(category = '2mb-3mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_2mb_to_3mb,
153+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND ttfb_category = 'good'), COUNTIF(category = '3mb-4mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_3mb_to_4mb,
154+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND ttfb_category = 'ni'), COUNTIF(category = '3mb-4mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_3mb_to_4mb,
155+
ROUND(SAFE_DIVIDE(COUNTIF(category = '3mb-4mb' AND ttfb_category = 'poor'), COUNTIF(category = '3mb-4mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_3mb_to_4mb,
156+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND ttfb_category = 'good'), COUNTIF(category = '4mb-5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_4mb_to_5mb,
157+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND ttfb_category = 'ni'), COUNTIF(category = '4mb-5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_4mb_to_5mb,
158+
ROUND(SAFE_DIVIDE(COUNTIF(category = '4mb-5mb' AND ttfb_category = 'poor'), COUNTIF(category = '4mb-5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_4mb_to_5mb,
159+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND ttfb_category = 'good'), COUNTIF(category = '>5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_good_pct_5mb_and_above,
160+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND ttfb_category = 'ni'), COUNTIF(category = '>5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_ni_pct_5mb_and_above,
161+
ROUND(SAFE_DIVIDE(COUNTIF(category = '>5mb' AND ttfb_category = 'poor'), COUNTIF(category = '>5mb' AND ttfb_category IS NOT NULL)), 4) AS ttfb_poor_pct_5mb_and_above
162+
FROM
163+
categorised_data
164+
GROUP BY
165+
client,
166+
is_root_page
167+
ORDER BY
168+
client,
169+
is_root_page

0 commit comments

Comments
 (0)