BigQuery - 具有不同 WHERE 参数的嵌套查询?
Posted
技术标签:
【中文标题】BigQuery - 具有不同 WHERE 参数的嵌套查询?【英文标题】:BigQuery - Nested Query with different WHERE parameters? 【发布时间】:2020-09-02 20:41:01 【问题描述】:我正在尝试按日期获取 user_counts 和 new_user_counts,其中 new_user_counts 由条件定义 WHERE 时间戳日期 event_timestamp = 时间戳日期 user_first_touch_timestamp 而 user_counts 将获取同一日期范围内 user_pseduo_id 字段的不同计数。如何在同一个查询中执行此操作?这是我当前查询的样子。
最终,我希望结果如下:
|Date | new_user_count | user_counts |
|20200820 | X | Y |
这是我在代码第 8 行遇到的错误: 语法错误:函数调用不能应用于此表达式。函数调用需要路径,例如a.b.c() 在 [8:5]
谢谢。
SELECT
event_date,
COUNT (DISTINCT(user_pseudo_id)) AS new_user_counts FROM
`my-google-analytics-table-name.*`
WHERE DATE(TIMESTAMP_MICROS(event_timestamp)) =
DATE(TIMESTAMP_MICROS(user_first_touch_timestamp))
AND event_date BETWEEN '20200820' AND '20200831'
(SELECT
COUNT (DISTINCT(user_pseudo_id)) AS user_counts
FROM `my-google-analytics-table-name.*`
WHERE event_date BETWEEN '20200820' AND '20200831'
)
GROUP BY event_date
ORDER BY event_date ASC
【问题讨论】:
请提供Minimal, Reproducible Example,您当前的查询有什么“错误”?它会产生错误的结果还是...???请提供更多详细信息 谢谢,米哈伊尔。我现在用错误语法错误更新了线程:函数调用无法应用于此表达式。函数调用需要路径,例如a.b.c() 在 [8:5] 【参考方案1】:在下面尝试(仅基于您的原始查询,只是修复语法/逻辑)
SELECT
event_date,
COUNT(DISTINCT IF(
DATE(TIMESTAMP_MICROS(event_timestamp)) = DATE(TIMESTAMP_MICROS(user_first_touch_timestamp)),
user_pseudo_id,
NULL
)) AS new_user_counts,
COUNT(DISTINCT(user_pseudo_id)) AS user_counts
FROM `my-google-analytics-table-name.*`
GROUP BY event_date
ORDER BY event_date ASC
【讨论】:
谢谢,米哈伊尔。我用两个显示字段不同格式的屏幕截图更新了问题。您刚刚发布的修改后的查询可用于按日期提取新用户数。在我的原始查询中,查询的嵌套部分想要提取相同日期的总用户数,然后显示三列:日期/新用户数/总用户数 查看更新的答案 - 我想我修复了您的查询以产生预期的结果 谢谢,米哈伊尔。那行得通。我希望您不介意后续问题,但我想知道相同的查询是否也适用于 CASE 函数?如果是,与 CASE 相比,当前结构的优势是什么?感谢您对 SO 的帮助。 很难在评论中回答并且没有详细信息 - 请发布包含所有相关详细信息的新问题,我会回答以上是关于BigQuery - 具有不同 WHERE 参数的嵌套查询?的主要内容,如果未能解决你的问题,请参考以下文章
如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?
BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择