Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions sql/2025/ecommerce/core_web_vitals_by_platform.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#standardSQL
# CrUX Core Web Vitals performance of Ecommerce vendors by device (fid was upated to inp, and is non optinal now)
CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
good / (good + needs_improvement + poor) >= 0.75
);

CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
good + needs_improvement + poor > 0
);


SELECT
client,
ecomm,
COUNT(DISTINCT origin) AS origins,
# Origins with good LCP divided by origins with any LCP.
SAFE_DIVIDE(
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))
) AS pct_good_lcp,

# Origins with good INP divided by origins with any inp.
SAFE_DIVIDE(
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
) AS pct_good_inp,

# Origins with good CLS divided by origins with any CLS.
SAFE_DIVIDE(
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
) AS pct_good_cls,

# Origins with good LCP, inp, and CLS divided by origins with any LCP, inp, and CLS.
SAFE_DIVIDE(
COUNT(DISTINCT IF(
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
IS_GOOD(fast_inp, avg_inp, slow_inp) AND
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
)),
COUNT(DISTINCT IF(
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
IS_NON_ZERO(fast_inp, avg_inp, slow_inp) AND
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL
))
) AS pct_good_cwv
FROM
`chrome-ux-report.materialized.device_summary`
JOIN (
SELECT
_TABLE_SUFFIX AS client,
url,
app AS ecomm
FROM
`httparchive.technologies.2025_06_01_*`
WHERE
category = 'Ecommerce' AND
(
app != 'Cart Functionality' AND
app != 'Google Analytics Enhanced eCommerce'
)
)
ON
CONCAT(origin, '/') = url AND
IF(device = 'desktop', 'desktop', 'mobile') = client
WHERE
date = '2025-07-01'
GROUP BY
client,
ecomm
ORDER BY
origins DESC
43 changes: 43 additions & 0 deletions sql/2025/ecommerce/median_lighthouse_score_ecommsites.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
WITH technologies AS (
SELECT
client,
page,
category,
technology,
rank,
lighthouse,
COUNT(DISTINCT page) OVER (PARTITION BY client) AS total_websites
FROM `httparchive.all.pages`,
UNNEST(technologies) AS tech,
UNNEST(categories) AS category
WHERE
date = '2025-07-01' AND
is_root_page = TRUE
)

SELECT
client,
rank,
technology,
ARRAY_AGG(DISTINCT category) AS categories,
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.performance.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_performance,
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.accessibility.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_accessibility,
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.seo.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_seo,
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.best-practices.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_best_practices,
ANY_VALUE(total_websites) AS total_websites,
COUNT(DISTINCT page) AS number_of_websites,
COUNT(DISTINCT page) / ANY_VALUE(total_websites) AS percent_of_websites
FROM technologies
WHERE
category = 'Ecommerce' AND
(
technology != 'Cart Functionality' AND
technology != 'Google Analytics Enhanced eCommerce'
)
GROUP BY
client,
rank,
technology
ORDER BY
client,
number_of_websites DESC
175 changes: 175 additions & 0 deletions sql/2025/ecommerce/top_ecommerce.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
#standardSQL
# Top Ecommerce platforms, compared to 2021
# top_ecommerce.sql
SELECT
client,
2025 AS year,
technologies.technology AS ecommerce,
COUNT(DISTINCT page) AS freq,
total,
COUNT(DISTINCT page) / total AS pct
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
JOIN (
SELECT
client,
COUNT(0) AS total
FROM
`httparchive.all.pages`
WHERE
date = '2025-07-01' AND
is_root_page
GROUP BY
client
)
USING (client)
WHERE
cats = 'Ecommerce' AND
date = '2025-07-01' AND
is_root_page AND
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
GROUP BY
client,
total,
ecommerce
UNION ALL
SELECT
client,
2024 AS year,
technologies.technology AS ecommerce,
COUNT(DISTINCT page) AS freq,
total,
COUNT(DISTINCT page) / total AS pct
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
JOIN (
SELECT
client,
COUNT(0) AS total
FROM
`httparchive.all.pages`
WHERE
date = '2024-06-01' AND
is_root_page
GROUP BY
client
)
USING (client)
WHERE
cats = 'Ecommerce' AND
date = '2024-06-01' AND
is_root_page AND
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
GROUP BY
client,
total,
ecommerce
UNION ALL
SELECT
client,
2023 AS year,
technologies.technology AS ecommerce,
COUNT(DISTINCT page) AS freq,
total,
COUNT(DISTINCT page) / total AS pct
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
JOIN (
SELECT
client,
COUNT(0) AS total
FROM
`httparchive.all.pages`
WHERE
date = '2023-06-01' AND
is_root_page
GROUP BY
client
)
USING (client)
WHERE
cats = 'Ecommerce' AND
date = '2023-06-01' AND
is_root_page AND
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
GROUP BY
client,
total,
ecommerce
UNION ALL
SELECT
client,
2022 AS year,
technologies.technology AS ecommerce,
COUNT(DISTINCT page) AS freq,
total,
COUNT(DISTINCT page) / total AS pct
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
JOIN (
SELECT
client,
COUNT(0) AS total
FROM
`httparchive.all.pages`
WHERE
date = '2022-08-01' AND -- noqa: CV09
is_root_page
GROUP BY
client
)
USING (client)
WHERE
cats = 'Ecommerce' AND
date = '2022-08-01' AND -- noqa: CV09
is_root_page AND
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
GROUP BY
client,
total,
ecommerce
UNION ALL
SELECT
client,
2021 AS year,
technologies.technology AS ecommerce,
COUNT(DISTINCT page) AS freq,
total,
COUNT(DISTINCT page) / total AS pct
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
JOIN (
SELECT
client,
COUNT(0) AS total
FROM
`httparchive.all.pages`
WHERE
date = '2021-07-01' AND
is_root_page
GROUP BY
client
)
USING (client)
WHERE
cats = 'Ecommerce' AND
date = '2021-07-01' AND
is_root_page AND
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
GROUP BY
client,
total,
ecommerce
ORDER BY
year DESC,
pct DESC
69 changes: 69 additions & 0 deletions sql/2025/ecommerce/top_payment_provider_by_geo.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#standardSQL
# payment popularity per geo
# top_payment_provider_by_geo.sql
WITH geo_summary AS (
SELECT
`chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo,
IF(device = 'desktop', 'desktop', 'mobile') AS client,
origin,
COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total
FROM
`chrome-ux-report.materialized.country_summary`
WHERE
yyyymm = 202506
UNION ALL
SELECT
'ALL' AS geo,
IF(device = 'desktop', 'desktop', 'mobile') AS client,
origin,
COUNT(DISTINCT origin) OVER (PARTITION BY IF(device = 'desktop', 'desktop', 'mobile')) AS total
FROM
`chrome-ux-report.materialized.device_summary`
WHERE
yyyymm = 202506
)

SELECT
*
FROM (
SELECT
client,
geo,
payment,
COUNT(0) AS pages,
ANY_VALUE(total) AS total,
COUNT(DISTINCT url) / ANY_VALUE(total) AS pct
FROM (
SELECT DISTINCT
geo,
client,
CONCAT(origin, '/') AS url,
total
FROM
geo_summary
) JOIN (
SELECT DISTINCT
client,
cats,
technologies.technology AS payment,
page AS url
FROM
`httparchive.all.pages`,
UNNEST(technologies) AS technologies,
UNNEST(technologies.categories) AS cats
WHERE
technologies.technology IS NOT NULL AND
cats = 'Payment processors' AND
technologies.technology != '' AND
date = '2025-07-01' AND
is_root_page
) USING (client, url)
GROUP BY
client,
geo,
payment
)
WHERE
pages > 1000
ORDER BY
pages DESC
Loading