如何在 BigQuery SQL 中将一组用户分组为 10 个群组?
Posted
技术标签:
【中文标题】如何在 BigQuery SQL 中将一组用户分组为 10 个群组?【英文标题】:How to group set of users in cohort of 10 in BigQuery SQL? 【发布时间】:2019-12-16 09:20:50 【问题描述】:我正在使用以下查询根据用户触发特定事件的次数来划分用户。我希望将用户分组为 10 个群组,例如,触发事件 0-10 次或 11-20 次的用户数。此外,用户应属于特定的同类群组,并且不得包含在多个群组中。
SELECT COUNT(event_names) AS asset_no, id
FROM
`abc`
WHERE
app_store = "iTunes"
AND version = "2.5"
AND (date between "20191116" AND "20191122")
AND event_names IN ("asset")
AND id IN
(
SELECT
DISTINCT id
FROM
`xyz`
WHERE
event_names = "internet"
AND internet_status = "1"
)
GROUP BY
id
【问题讨论】:
【参考方案1】:你需要使用RANGE_BUCKET函数
在名为 students 的表中,根据学生的年龄检查每个 age_group 存储桶中将存在多少条记录:
age_group 0(年龄 age_group 1(年龄 >= 10,年龄 age_group 2(年龄 >= 20,年龄 age_group 3 (年龄 >= 30).
WITH students AS
(
SELECT 9 AS age UNION ALL
SELECT 20 AS age UNION ALL
SELECT 25 AS age UNION ALL
SELECT 31 AS age UNION ALL
SELECT 32 AS age UNION ALL
SELECT 33 AS age
)
SELECT RANGE_BUCKET(age, [10, 20, 30]) AS age_group, COUNT(*) AS count
FROM students
GROUP BY 1
+--------------+-------+
| age_group | count |
+--------------+-------+
| 0 | 1 |
| 2 | 2 |
| 3 | 3 |
+--------------+-------+
对于您的查询,可能是这样的:
with t (
..your query here
)
SELECT RANGE_BUCKET(asset_no, [10, 20, 30]) AS asset_group, COUNT(*) AS count
FROM t
GROUP BY 1
【讨论】:
谢谢,有帮助!有没有办法为不同的存储桶提供asset_group(即0、1、2)的别名? 您需要将其编写为外部查询,并使用 case/when 语法。以上是关于如何在 BigQuery SQL 中将一组用户分组为 10 个群组?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BigQuery 中将此旧版 SQL 转换为标准 SQL?
如何在 Google BigQuery 中将日期解析为周年?
如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?