【问题标题】:How to group set of users in cohort of 10 in BigQuery SQL?如何在 BigQuery SQL 中将一组用户分组为 10 个群组?
【发布时间】: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

【问题讨论】:

    标签: mysql sql firebase google-bigquery


    【解决方案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 语法。
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多