【发布时间】:2018-08-28 08:05:47
【问题描述】:
使用 Google BigQuery
WITH prep AS (
SELECT
SPLIT(offer.name, '-') AS split,
id
FROM `hasoffer.offers_new` AS offer
)
SELECT *
FROM
(
SELECT
split[SAFE_ORDINAL(1)] AS Game,
split[SAFE_ORDINAL(2)] AS GEO,
IF ( REGEXP_CONTAINS ('INTERNAL - POGED',offers.name), "POGED",
IF(REGEXP_CONTAINS ('INTERNAL',offers.name), "Internal", IF(
REGEXP_CONTAINS('REDIRECT',offers.name), "REDIRECT", "Public"))) AS
Category,
DATE(conv.datetime) AS Date,
(SUM(conv.revenue_cents)/100) AS Revenue
FROM `hasoffer.offers_new` AS offers
LEFT JOIN
prep
ON
offers.id=prep.id
LEFT JOIN
`hasoffer.conversions` AS conv
ON offers.id = conv.offer_id
WHERE
conv.advertiser_id = 632
AND EXTRACT(MONTH FROM conv.datetime) = EXTRACT(MONTH FROM CURRENT_DATE())
AND EXTRACT(YEAR FROM conv.datetime) = 2018
AND conv.status != 'rejected'
AND conv.affiliate_sub1 IS NOT NULL
group by
GEO,
Game,
Category,
Date
order by
Date)AS SourceTable
这是表格的外观:
预期输出:
“日期”列必须分成多列,每列代表一个月中的一天,并且应包含不同游戏和地理区域的收入总和值。
此外,必须创建一个名为“总计”的列,该列提供当月游戏广告地理的总收入。请提出一种方法来做到这一点
【问题讨论】:
-
在标准 SQL 中没有
split并且使用extract提取日期的一部分。除此之外,我不明白你在做什么。 -
请同时发布您的预期输出。
-
如果您单击图像并查看表格,您可以看到列日期。如上所述,我正在尝试将该列拆分为多个列
-
您指的是 Google 的 Google Big Query 的“标准 SQL”吗?
-
您正在尝试“透视”您的数据,这通常是您在报告层(例如 Google Data Studio) 中而不是在 SQL 中执行的操作。也就是说,如果您明确说明所需的列数,则可以在 SQL 中进行透视;因此,要编写适用于任何给定月份的 SQL,您需要始终拥有 31 个日期列和一个总计,即使是 2 月也是如此。那是你要的吗?为什么要在 SQL 中而不是在 Data Studio 或其他报告环境中进行呢?
标签: sql google-bigquery