select
concat(fullvisitorid,cast(visitid as string)) as unique_session_id
,case
when h.item.productSku is not null then h.hitNumber
else max(h.hitnumber)
end
,h.item.transactionid
,h.item.itemrevenue/pow(10,6)
,h.item.productSku
from `myproject.mydataset.ga_sessions_20180101`, unnest(hits) as h
group by 1
Глядя на оператор case выше (строка 3)





Я бы посоветовал провести группировку и найти максимальное количество совпадений в подзапросе. Если вы собираетесь использовать агрегатную функцию, такую как MAX(), в предложении select, вам необходимо сгруппировать или иметь агрегатные функции для других полей в select. Может быть полезно выполнять агрегированные подзапросы с использованием общих табличных выражений.
WITH data AS (
SELECT
CONCAT(fullvisitorid, CAST(visitid AS string)) AS unique_session_id,
h.hitNumber,
h.item.transactionid,
h.item.itemrevenue/POW(10,6) AS itemRevenue,
h.item.productSku
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_20170801`,
UNNEST(hits) AS h
),
max_hits AS (
SELECT
unique_session_id,
MAX(hitNumber) AS max_hit_number
FROM data
GROUP BY 1
)
SELECT
d.unique_session_id,
CASE
WHEN d.productSku IS NOT NULL THEN d.hitNumber
ELSE m.max_hit_number
END,
d.transactionid,
d.itemrevenue,
d.productSku
FROM
data AS d JOIN max_hits AS m
ON d.unique_session_id = m.unique_session_id
непонятно - какую агрегацию вы ожидаете при группировке по unique_session_id? также вы не можете группировать только по unique_session_id! как насчет transactionid, productSku и какое агрегирование делать для дохода от товара? Мне нужно вернуться к вашему вопросу и предоставить более подробную информацию, а также пример ввода и ожидаемого вывода