обновить SQL - продукты также приобретены - PullRequest
0 голосов
/ 15 апреля 2019

Используя этот запрос из кулинарной книги 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): JOIN (включая полусоединение) и UNION ALL (запятая, диапазон дат) нельзя объединять в одном операторе SELECT.Либо переместите UNION ALL во внутренний запрос, либо присоедините к внешнему запросу.

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

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

1 Ответ

2 голосов
/ 15 апреля 2019

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

Вы буквально делаете то, что предлагается в заявлении об ошибке - что является 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

...