我是bigquery的新手,也是我SQL练习的早期版本。 我有一个SQL查询,其目标是恢复为特定域的特定国家/地区记录的总访问量。 该国家/地区由指定hits.customDimensions.index和hits.customDimensions.value以及页面主机的组合决定 我希望能够恢复各国的总访问量。但是我的下面的代码给出了每个国家完全膨胀的数字。任何人都可以帮助我进行狡猾的聚合吗?
SELECT
date,
hits.customDimensions.index,
hits.customDimensions.value,
SUM(totals.visits) AS totals_visits
FROM (TABLE_DATE_RANGE([95212100.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY')))
WHERE
hits.page.hostname = 'www.xxxx.com' AND ((hits.customDimensions.index=5
AND hits.customDimensions.value='US') OR (hits.customDimensions.index=5
AND hits.customDimensions.value='UK') OR ((hits.customDimensions.index=5
AND hits.customDimensions.value='India')))
GROUP BY date, hits.customDimensions.index, hits.customDimensions.value
答案 0 :(得分:0)
请尝试以下BigQuery Legacy SQL
#legacySQL
SELECT
date, val, SUM(visits) AS visits
FROM (
SELECT
date,
totals.visits AS visits,
l.value AS val,
MAX(hits.customDimensions.index = 5
AND hits.customDimensions.value = l.value
) WITHIN RECORD AS flag
FROM (SELECT * FROM TABLE_DATE_RANGE([95212100.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))) AS s
CROSS JOIN ( -- Pre-Selected Countries Only
SELECT value FROM
(SELECT 'US' as value),
(SELECT 'UK' as value),
(SELECT 'India' as value)
) AS l
WHERE hits.page.hostname = 'www.xxxx.com'
AND hits.customDimensions.index = 5
HAVING flag
)
GROUP BY date, val
如果您需要输出所有国家/地区 - 您可以使用以下查询
#legacySQL
SELECT
date, val, SUM(visits) AS visits
FROM (
SELECT
date,
totals.visits AS visits,
l.value AS val,
MAX(hits.customDimensions.index = 5
AND hits.customDimensions.value = l.value
) WITHIN RECORD AS flag
FROM (SELECT * FROM TABLE_DATE_RANGE([95212100.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))) AS s
CROSS JOIN ( -- All 'qualified' countries
SELECT hits.customDimensions.value AS value
FROM TABLE_DATE_RANGE([95212100.ga_sessions_], DATE_ADD(CURRENT_TIMESTAMP(), -1, 'MONTH'), DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))
WHERE hits.page.hostname = 'www.xxxx.com'
AND hits.customDimensions.index = 5
GROUP BY value
) AS l
WHERE hits.page.hostname = 'www.xxxx.com'
AND hits.customDimensions.index = 5
HAVING flag
)
GROUP BY date, val