CREATE TEMP FUNCTION IS_GOOD (good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
good / (good + needs_improvement + poor) >= 0.75
);
SELECT DISTINCT
device,
origin,
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AS good_lcp,
IS_GOOD(fast_fid, avg_fid, slow_fid) AS good_fid,
IS_GOOD(small_cls, medium_cls, large_cls) AS good_cls,
(
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
(fast_fid + avg_fid + slow_fid = 0 OR IS_GOOD(fast_fid, avg_fid, slow_fid)) AND
IS_GOOD(small_cls, medium_cls, large_cls)) AS good_cwv
FROM
`chrome-ux-report.materialized.device_summary`
JOIN (
SELECT
IF(client = 'desktop', 'desktop', 'phone') AS device,
date,
SUBSTR(root_page, 0, LENGTH(root_page) - 1) AS origin,
technology.technology
FROM
`httparchive.all.pages`,
UNNEST (technologies) AS technology
WHERE
date = '2022-10-01' AND
technology.technology = 'Webzie')
USING (date, device, origin)
WHERE
date = '2022-10-01' AND
(
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
(fast_fid + avg_fid + slow_fid = 0 OR IS_GOOD(fast_fid, avg_fid, slow_fid)) AND
IS_GOOD(small_cls, medium_cls, large_cls)) = FALSE
ORDER BY
device DESC,
origin DESC