考虑以下查询:
#standardSQL
WITH table AS (
SELECT
*
FROM
`project.dataset.ga_sessions_*`
WHERE
_TABLE_SUFFIX = '20180118'
)
SELECT
date,
device.deviceCategory,
CASE WHEN totals.newVisits IS NOT NULL THEN 1 END newUser,
(SELECT COUNT(DISTINCT returningUser) FROM (SELECT CASE WHEN totals.newVisits IS NULL THEN fullVisitorId END returningUser FROM table)) returningUser
FROM
table
这将返回以下内容:
如您所见,
returningUser
是一个与外部查询列不相关的子查询。问题是,如何根据外部查询列获取
returningUser
数字?理想情况下,我不想加入外部查询列,因为要求是针对所有这些列返回return User number。我希望能够更新此查询以添加更多外部查询列以及更多子查询,这些子查询的编号基于所有外部查询列。
更新
数据集来自Google Analytics(分析)。这些字段是默认字段,例如在https://support.google.com/analytics/answer/3416091处可用的示例数据集。
返回预期结果的示例查询-但是,它不如我试图开始工作的上述方法那么干净和灵活:
#standardSQL
WITH table AS (
SELECT
*
FROM
`project.dataset.ga_sessions_*`
WHERE
_TABLE_SUFFIX = '20180118'
)
SELECT
date,
deviceCategory,
COUNT(DISTINCT returningUser) returningUser
FROM (
SELECT
date,
device.deviceCategory,
CASE WHEN totals.newVisits IS NOT NULL THEN 1 END newUser,
CASE WHEN totals.newVisits IS NULL THEN fullVisitorId END returningUser
FROM
table)
GROUP BY
date,
deviceCategory
结果:
最佳答案
我无法理解您真正希望查询执行的操作。我最好的猜测是:
SELECT date, deviceCategory, COUNT(newVisits),
COUNT(DISTINCT COALESCE(s.newVisits, s.fullVisitorId))
FROM `project.dataset.ga_sessions_*` s
WHERE _TABLE_SUFFIX = '20180118'
GROUP BY date, deviceCategory
ORDER BY date, deviceCategory;
关于sql - BigQuery子查询基于所有外部列的返回数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884711/