Список товаров приобретенные пользователем, купившим определенный товар

Приведенный ниже запрос позволяет увидеть, что еще приобрели пользователи, которые купили определенный товар. Товары могут быть перечислены не в том порядке, в котором их покупали.

WITH
  product AS (
--- Выбираем конкретный продукт - "название продукта" или его "ид"
    SELECT 'Google Navy Speckled Tee' AS selected_product
  ),
--- Получаем список пользователей и приобретенных ими товаров
  purchase_events AS (
    SELECT user_pseudo_id,items
    FROM
      `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
    WHERE _TABLE_SUFFIX BETWEEN '20201101' AND '20210131' AND event_name = 'purchase'
  ),
--- Достам название товара из поля "item." типа RECORD с помощью UNNEST для каждого уникального user_id
  product_buyers AS (
    SELECT DISTINCT user_pseudo_id
    FROM
      product,
      purchase_events,
      UNNEST(items) AS items
    WHERE
      -- вместо название, можем использовать ид товара
      items.item_name = selected_product
  )
--- Суммируем количество купленных товаров для пользователей купивших 'Google Navy Speckled Tee'
SELECT
  items.item_name AS item_name,
  SUM(items.quantity) AS item_quantity
FROM
  product,
  purchase_events,
  UNNEST(items) AS items
WHERE
  user_pseudo_id IN (SELECT user_pseudo_id FROM product_buyers)
  -- вместо название, можем использовать ид товара
  AND items.item_name != selected_product
GROUP BY item_name
ORDER BY item_quantity DESC
В результате получаем список товаров которые покупают пользователи вместе или в другой сессии, которые купили "Google Navy Speckled Tee" и количество таких покупок другого товара.
Для примера возьмем другой товар

WITH
  product AS (
    SELECT 'Maze Pen' AS selected_product
  ),
  purchase_events AS (
    SELECT user_pseudo_id,items
    FROM
      `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`
    WHERE _TABLE_SUFFIX BETWEEN '20201101' AND '20210131' AND event_name = 'purchase'
  ),
  product_buyers AS (
    SELECT DISTINCT user_pseudo_id
    FROM
      product,
      purchase_events,
      UNNEST(items) AS items
    WHERE
      items.item_name = selected_product
  )
SELECT
  items.item_name AS item_name,
  SUM(items.quantity) AS item_quantity
FROM
  product,
  purchase_events,
  UNNEST(items) AS items
WHERE
  user_pseudo_id IN (SELECT user_pseudo_id FROM product_buyers)
  AND items.item_name != selected_product
GROUP BY item_name
ORDER BY item_quantity DESC
Как видим и список товаров изменился
Made on
Tilda