Хотя я довольно привык к PostgreSQL и многим другим диалектам SQL, эта вещь меня ставит в тупик:
У меня есть таблица BigQuery, которая выглядит примерно так:
orders
|- orderId
|- orderStatus
|- orderLines
|- sku
|- price_per_item
|- quantity
В стандартном SQL я бы сделал:
select orderLines.sku, sum(orderLines.price_per_item * quantity)
from flatten(orders, orderLines.sku) o
where orderStatus = 'valid'
но «выравнивание» не работает в стандартном SQL.
Итак, я могу сделать что-то вроде этого:
select array(select sku FROM UNNEST(orderLines)) sku, array(select price_per_item from unnest(orderLines)) revenue
from orders
Однако я не могу суммировать это сейчас, т.е.:
select array(select sku FROM UNNEST(orderLines)) sku, sum(array(select price_per_item from unnest(orderLines))) revenue
from orders
group by sku
И я попытался сделать это с помощью инструкции with для предварительного создания таблицы. Но результат тот же.
Каков правильный подход и почему это кажется излишне многословным?
Меня немного раздражает необходимость использовать устаревший SQL, потому что я также использую функцию в объединении, и это работает только в стандартном SQL.