首页 > 解决方案 > 如何在 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

标签: mysqlsqlfirebasegoogle-bigquery

解决方案


你需要使用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

推荐阅读