mysql - 如何在 BigQuery SQL 中将一组用户分组为 10 个?
问题描述
我正在使用以下查询根据用户触发特定事件的次数来划分用户。我希望将用户分组为 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
解决方案
你需要使用RANGE_BUCKET函数
在名为 students 的表中,根据学生的年龄检查每个 age_group 存储桶中将存在多少条记录:
- 年龄组 0(年龄 < 10)
- 年龄组 1(年龄 >= 10,年龄 < 20)
- 年龄组 2(年龄 >= 20,年龄 < 30)
- 年龄组 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
推荐阅读
- python - 我收到“RequestsDependencyWarning:urllib3 (1.25.3) 或 chardet (3.0.4) 与支持的版本不匹配!”
- asp.net-core - Blazor:如何从子组件中的事件中获取发件人
- flutter - 如何从类字段设置提供者值?
- parallel-processing - 如何在 Vulkan 中适当地设置工作组计数
- ansible - 无法使用循环复制文件
- regex - 修剪标签之间的空间
- sql - 如何比较jsonb列的数组元素
- npm - Insufficient Entropy cryptiles 错误解决
- javascript - 我正在尝试使用传单 javascript 库在地图上可视化一些数据点。你能告诉我我的代码有什么问题吗?
- javascript - 带有 Gatsby JS 和 Contentful 的 Onepage,如何导入我的第一个简单字符串