BigQuery: преобразовать таблицу в новую структуру с помощью фиктивных переменных - PullRequest
0 голосов
/ 09 января 2020

Допустим, следующий запрос, связанный с Google Analytics (см. Ниже).

Мне нужно подставить код столбца «Канал», чтобы для каждого уникального значения требовался отдельный столбец, и преобразовать в 0 и 1 значения.

Для стандарта SQL кто-нибудь знает, как добиться этого на стандартном SQL языке?

Обратите внимание, что приведенный ниже запрос используется только в качестве примера. Существуют запросы, в которых мне необходимо создать фиктивный код, который является более сложным, и где простых операторов CASE WHEN недостаточно для генерации «дублированного» результата.

#standardSQL
SELECT device.deviceCategory AS Device, channelGrouping AS Channel, SUM(totals.visits) AS Sessions
FROM `[project_id].[dataset_id].[table_id]`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) # previous 13 weeks
  AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))  
GROUP BY Device, Channel

Пример, предположим следующую таблицу (для иллюстрации (в формате CSV):

Device,Channel,Sessions
Desktop,Organic,25
Desktop,Paid,30
Desktop,Affiliate,14
Mobile,Organic,26
Mobile,Paid,66
Mobile,Affiliate,70

Желаемый результат:

Device,Organic,Paid,Affiliate,Sessions
Desktop,1,0,0,25
Desktop,0,1,0,30
Desktop,0,0,1,14
Mobile,1,0,0,26
Mobile,0,1,0,66
Mobile,0,0,1,70

1 Ответ

0 голосов
/ 09 января 2020

Если у вас есть какое-то конкретное правило c для классификации вашего поля как 1 или 0 на основе данных вашей таблицы, вы можете использовать что-то вроде этого:

CASE 
    WHEN field in (SELECT distinct value from <your-table> WHERE <classification-rules-for-1> ) THEN 1
    WHEN field in (SELECT distinct value from <your-table> WHERE <classification-rules-for-0> ) THEN 0
END

Подходит ли оно для вас?

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