обновить SQL — также приобретенные продукты

#sql #google-analytics #google-bigquery

# #sql #google-analytics #google-bigquery

Вопрос:

Используя этот запрос из поваренной книги BigQuery и добавленный в _table_date_range_, потому что я хочу запрашивать больше, чем один день.

Запрос находит продукт и возвращает другие продукты, приобретенные с этим продуктом.

 SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity
FROM (TABLE_DATE_RANGE([ghd-analytics-xxxxxx.xxxxxx.ga_sessions_],
TIMESTAMP('2018-08-01'), TIMESTAMP('2018-09-31')))
WHERE fullVisitorId IN (
  SELECT fullVisitorId
  FROM (TABLE_DATE_RANGE([ghd-analytics-xxxxxx.xxxxxx.ga_sessions_],
TIMESTAMP('2018-08-01'), TIMESTAMP('2018-08-03')))
  WHERE hits.item.productName CONTAINS 'productA'
   AND totals.transactions>=1
  GROUP BY fullVisitorId )
 AND hits.item.productName IS NOT NULL
 AND hits.item.productName !='productA'
GROUP BY other_purchased_products
ORDER BY quantity DESC;
 

Сообщение об ошибке:

(L2: 1): ОБЪЕДИНЕНИЕ (включая полусоединение) и ОБЪЕДИНЕНИЕ ВСЕХ (запятая, диапазон дат) не могут быть объединены в одном операторе SELECT . Либо переместите ОБЪЕДИНЕНИЕ ALL во внутренний запрос, либо JOIN во внешний запрос.

Я не уверен, как делать то, что он предлагает!

Большое спасибо за любую помощь.

Ответ №1:

Я не уверен, как делать то, что он предлагает!

Вы просто буквально делаете то, что предлагается в заявлении об ошибке, а именно move the UNION ALL to an inner query
Итак, в приведенной ниже исправленной версии — я только что добавил SELECT * FROM во вторую строку

 SELECT hits.item.productName AS other_purchased_products, COUNT(hits.item.productName) AS quantity
FROM (SELECT * FROM TABLE_DATE_RANGE([ghd-analytics-xxxxxx.xxxxxx.ga_sessions_],
TIMESTAMP('2018-08-01'), TIMESTAMP('2018-09-31')))
WHERE fullVisitorId IN (
  SELECT fullVisitorId
  FROM (TABLE_DATE_RANGE([ghd-analytics-xxxxxx.xxxxxx.ga_sessions_],
TIMESTAMP('2018-08-01'), TIMESTAMP('2018-08-03')))
  WHERE hits.item.productName CONTAINS 'productA'
   AND totals.transactions>=1
  GROUP BY fullVisitorId )
 AND hits.item.productName IS NOT NULL
 AND hits.item.productName !='productA'
GROUP BY other_purchased_products
ORDER BY quantity DESC     
 

Примечание: Я надеюсь, что у вас есть веские причины использовать здесь устаревший SQL — в любом случае рассмотрите возможность перехода на стандартный SQL

Комментарии:

1. Большое спасибо за это. Я просто работаю с кулинарной книгой, которую предоставляет Google, и во многих из них все еще используются устаревшие примеры. Спасибо за вашу помощь.