Skip to content

Commit 92dca50

Browse files
Ecommerce 2025 SQL queries (#4354)
* Add 2025 ecommerce SQL queries * Update to July --------- Co-authored-by: Amandeep Singh <amandeepsinghvirdi@gmail.com>
1 parent f816774 commit 92dca50

File tree

7 files changed

+664
-0
lines changed

7 files changed

+664
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#standardSQL
2+
# CrUX Core Web Vitals performance of Ecommerce vendors by device (fid was upated to inp, and is non optinal now)
3+
CREATE TEMP FUNCTION IS_GOOD(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
4+
good / (good + needs_improvement + poor) >= 0.75
5+
);
6+
7+
CREATE TEMP FUNCTION IS_NON_ZERO(good FLOAT64, needs_improvement FLOAT64, poor FLOAT64) RETURNS BOOL AS (
8+
good + needs_improvement + poor > 0
9+
);
10+
11+
12+
SELECT
13+
client,
14+
ecomm,
15+
COUNT(DISTINCT origin) AS origins,
16+
# Origins with good LCP divided by origins with any LCP.
17+
SAFE_DIVIDE(
18+
COUNT(DISTINCT IF(IS_GOOD(fast_lcp, avg_lcp, slow_lcp), origin, NULL)),
19+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp), origin, NULL))
20+
) AS pct_good_lcp,
21+
22+
# Origins with good INP divided by origins with any inp.
23+
SAFE_DIVIDE(
24+
COUNT(DISTINCT IF(IS_GOOD(fast_inp, avg_inp, slow_inp), origin, NULL)),
25+
COUNT(DISTINCT IF(IS_NON_ZERO(fast_inp, avg_inp, slow_inp), origin, NULL))
26+
) AS pct_good_inp,
27+
28+
# Origins with good CLS divided by origins with any CLS.
29+
SAFE_DIVIDE(
30+
COUNT(DISTINCT IF(IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL)),
31+
COUNT(DISTINCT IF(IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL))
32+
) AS pct_good_cls,
33+
34+
# Origins with good LCP, inp, and CLS divided by origins with any LCP, inp, and CLS.
35+
SAFE_DIVIDE(
36+
COUNT(DISTINCT IF(
37+
IS_GOOD(fast_lcp, avg_lcp, slow_lcp) AND
38+
IS_GOOD(fast_inp, avg_inp, slow_inp) AND
39+
IS_GOOD(small_cls, medium_cls, large_cls), origin, NULL
40+
)),
41+
COUNT(DISTINCT IF(
42+
IS_NON_ZERO(fast_lcp, avg_lcp, slow_lcp) AND
43+
IS_NON_ZERO(fast_inp, avg_inp, slow_inp) AND
44+
IS_NON_ZERO(small_cls, medium_cls, large_cls), origin, NULL
45+
))
46+
) AS pct_good_cwv
47+
FROM
48+
`chrome-ux-report.materialized.device_summary`
49+
JOIN (
50+
SELECT
51+
_TABLE_SUFFIX AS client,
52+
url,
53+
app AS ecomm
54+
FROM
55+
`httparchive.technologies.2025_06_01_*`
56+
WHERE
57+
category = 'Ecommerce' AND
58+
(
59+
app != 'Cart Functionality' AND
60+
app != 'Google Analytics Enhanced eCommerce'
61+
)
62+
)
63+
ON
64+
CONCAT(origin, '/') = url AND
65+
IF(device = 'desktop', 'desktop', 'mobile') = client
66+
WHERE
67+
date = '2025-07-01'
68+
GROUP BY
69+
client,
70+
ecomm
71+
ORDER BY
72+
origins DESC
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
WITH technologies AS (
2+
SELECT
3+
client,
4+
page,
5+
category,
6+
technology,
7+
rank,
8+
lighthouse,
9+
COUNT(DISTINCT page) OVER (PARTITION BY client) AS total_websites
10+
FROM `httparchive.all.pages`,
11+
UNNEST(technologies) AS tech,
12+
UNNEST(categories) AS category
13+
WHERE
14+
date = '2025-07-01' AND
15+
is_root_page = TRUE
16+
)
17+
18+
SELECT
19+
client,
20+
rank,
21+
technology,
22+
ARRAY_AGG(DISTINCT category) AS categories,
23+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.performance.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_performance,
24+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.accessibility.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_accessibility,
25+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.seo.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_seo,
26+
APPROX_QUANTILES(CAST(JSON_EXTRACT_SCALAR(lighthouse, '$.categories.best-practices.score') AS NUMERIC), 1000)[OFFSET(500)] AS median_best_practices,
27+
ANY_VALUE(total_websites) AS total_websites,
28+
COUNT(DISTINCT page) AS number_of_websites,
29+
COUNT(DISTINCT page) / ANY_VALUE(total_websites) AS percent_of_websites
30+
FROM technologies
31+
WHERE
32+
category = 'Ecommerce' AND
33+
(
34+
technology != 'Cart Functionality' AND
35+
technology != 'Google Analytics Enhanced eCommerce'
36+
)
37+
GROUP BY
38+
client,
39+
rank,
40+
technology
41+
ORDER BY
42+
client,
43+
number_of_websites DESC
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
#standardSQL
2+
# Top Ecommerce platforms, compared to 2021
3+
# top_ecommerce.sql
4+
SELECT
5+
client,
6+
2025 AS year,
7+
technologies.technology AS ecommerce,
8+
COUNT(DISTINCT page) AS freq,
9+
total,
10+
COUNT(DISTINCT page) / total AS pct
11+
FROM
12+
`httparchive.all.pages`,
13+
UNNEST(technologies) AS technologies,
14+
UNNEST(technologies.categories) AS cats
15+
JOIN (
16+
SELECT
17+
client,
18+
COUNT(0) AS total
19+
FROM
20+
`httparchive.all.pages`
21+
WHERE
22+
date = '2025-07-01' AND
23+
is_root_page
24+
GROUP BY
25+
client
26+
)
27+
USING (client)
28+
WHERE
29+
cats = 'Ecommerce' AND
30+
date = '2025-07-01' AND
31+
is_root_page AND
32+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
33+
GROUP BY
34+
client,
35+
total,
36+
ecommerce
37+
UNION ALL
38+
SELECT
39+
client,
40+
2024 AS year,
41+
technologies.technology AS ecommerce,
42+
COUNT(DISTINCT page) AS freq,
43+
total,
44+
COUNT(DISTINCT page) / total AS pct
45+
FROM
46+
`httparchive.all.pages`,
47+
UNNEST(technologies) AS technologies,
48+
UNNEST(technologies.categories) AS cats
49+
JOIN (
50+
SELECT
51+
client,
52+
COUNT(0) AS total
53+
FROM
54+
`httparchive.all.pages`
55+
WHERE
56+
date = '2024-06-01' AND
57+
is_root_page
58+
GROUP BY
59+
client
60+
)
61+
USING (client)
62+
WHERE
63+
cats = 'Ecommerce' AND
64+
date = '2024-06-01' AND
65+
is_root_page AND
66+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
67+
GROUP BY
68+
client,
69+
total,
70+
ecommerce
71+
UNION ALL
72+
SELECT
73+
client,
74+
2023 AS year,
75+
technologies.technology AS ecommerce,
76+
COUNT(DISTINCT page) AS freq,
77+
total,
78+
COUNT(DISTINCT page) / total AS pct
79+
FROM
80+
`httparchive.all.pages`,
81+
UNNEST(technologies) AS technologies,
82+
UNNEST(technologies.categories) AS cats
83+
JOIN (
84+
SELECT
85+
client,
86+
COUNT(0) AS total
87+
FROM
88+
`httparchive.all.pages`
89+
WHERE
90+
date = '2023-06-01' AND
91+
is_root_page
92+
GROUP BY
93+
client
94+
)
95+
USING (client)
96+
WHERE
97+
cats = 'Ecommerce' AND
98+
date = '2023-06-01' AND
99+
is_root_page AND
100+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
101+
GROUP BY
102+
client,
103+
total,
104+
ecommerce
105+
UNION ALL
106+
SELECT
107+
client,
108+
2022 AS year,
109+
technologies.technology AS ecommerce,
110+
COUNT(DISTINCT page) AS freq,
111+
total,
112+
COUNT(DISTINCT page) / total AS pct
113+
FROM
114+
`httparchive.all.pages`,
115+
UNNEST(technologies) AS technologies,
116+
UNNEST(technologies.categories) AS cats
117+
JOIN (
118+
SELECT
119+
client,
120+
COUNT(0) AS total
121+
FROM
122+
`httparchive.all.pages`
123+
WHERE
124+
date = '2022-08-01' AND -- noqa: CV09
125+
is_root_page
126+
GROUP BY
127+
client
128+
)
129+
USING (client)
130+
WHERE
131+
cats = 'Ecommerce' AND
132+
date = '2022-08-01' AND -- noqa: CV09
133+
is_root_page AND
134+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
135+
GROUP BY
136+
client,
137+
total,
138+
ecommerce
139+
UNION ALL
140+
SELECT
141+
client,
142+
2021 AS year,
143+
technologies.technology AS ecommerce,
144+
COUNT(DISTINCT page) AS freq,
145+
total,
146+
COUNT(DISTINCT page) / total AS pct
147+
FROM
148+
`httparchive.all.pages`,
149+
UNNEST(technologies) AS technologies,
150+
UNNEST(technologies.categories) AS cats
151+
JOIN (
152+
SELECT
153+
client,
154+
COUNT(0) AS total
155+
FROM
156+
`httparchive.all.pages`
157+
WHERE
158+
date = '2021-07-01' AND
159+
is_root_page
160+
GROUP BY
161+
client
162+
)
163+
USING (client)
164+
WHERE
165+
cats = 'Ecommerce' AND
166+
date = '2021-07-01' AND
167+
is_root_page AND
168+
technologies.technology NOT IN ('Cart Functionality', 'Google Analytics Enhanced eCommerce')
169+
GROUP BY
170+
client,
171+
total,
172+
ecommerce
173+
ORDER BY
174+
year DESC,
175+
pct DESC
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#standardSQL
2+
# payment popularity per geo
3+
# top_payment_provider_by_geo.sql
4+
WITH geo_summary AS (
5+
SELECT
6+
`chrome-ux-report`.experimental.GET_COUNTRY(country_code) AS geo,
7+
IF(device = 'desktop', 'desktop', 'mobile') AS client,
8+
origin,
9+
COUNT(DISTINCT origin) OVER (PARTITION BY country_code, IF(device = 'desktop', 'desktop', 'mobile')) AS total
10+
FROM
11+
`chrome-ux-report.materialized.country_summary`
12+
WHERE
13+
yyyymm = 202506
14+
UNION ALL
15+
SELECT
16+
'ALL' AS geo,
17+
IF(device = 'desktop', 'desktop', 'mobile') AS client,
18+
origin,
19+
COUNT(DISTINCT origin) OVER (PARTITION BY IF(device = 'desktop', 'desktop', 'mobile')) AS total
20+
FROM
21+
`chrome-ux-report.materialized.device_summary`
22+
WHERE
23+
yyyymm = 202506
24+
)
25+
26+
SELECT
27+
*
28+
FROM (
29+
SELECT
30+
client,
31+
geo,
32+
payment,
33+
COUNT(0) AS pages,
34+
ANY_VALUE(total) AS total,
35+
COUNT(DISTINCT url) / ANY_VALUE(total) AS pct
36+
FROM (
37+
SELECT DISTINCT
38+
geo,
39+
client,
40+
CONCAT(origin, '/') AS url,
41+
total
42+
FROM
43+
geo_summary
44+
) JOIN (
45+
SELECT DISTINCT
46+
client,
47+
cats,
48+
technologies.technology AS payment,
49+
page AS url
50+
FROM
51+
`httparchive.all.pages`,
52+
UNNEST(technologies) AS technologies,
53+
UNNEST(technologies.categories) AS cats
54+
WHERE
55+
technologies.technology IS NOT NULL AND
56+
cats = 'Payment processors' AND
57+
technologies.technology != '' AND
58+
date = '2025-07-01' AND
59+
is_root_page
60+
) USING (client, url)
61+
GROUP BY
62+
client,
63+
geo,
64+
payment
65+
)
66+
WHERE
67+
pages > 1000
68+
ORDER BY
69+
pages DESC

0 commit comments

Comments
 (0)