sql - 根据具有特定值的 ID 创建自定义组

标签 sql google-bigquery

例如我有下一张 table

<表类=“s-表”> <标题> user_id 事件 Action <正文> 1111111 名称_1 空 1111111 名称_2 空 2222222 名称_1 空 2222222 名称_2 空 2222222 名称_3 是 3333333 名称_1 空 3333333 名称_2 空 3333333 名称_3 没有

我需要根据事件和操作选择 ID 和新列

  • 1 个组 - ID 有事件 1 和 2
  • 2 个组 - ID 包含全部 3 个事件,name_3 的操作为“否”
  • 3 个组 - ID 包含全部 3 个事件,name_3 的操作为"is"

所需的输出:

<表类=“s-表”> <标题> user_id 组 <正文> 1111111 group_1 2222222 group_3 3333333 group_2

最佳答案

我们可以尝试使用条件聚合方法:

SELECT
    user_id,
    CASE WHEN COUNT(DISTINCT event) = 3 AND
              MAX(CASE WHEN event = 'name_3' THEN action END) = 'no' THEN 2
         WHEN COUNT(DISTINCT event) = 3 AND
              MAX(CASE WHEN event = 'name_3' THEN action END) = 'yes' THEN 3
         WHEN COUNT(DISTINCT event) = 2 AND
              COUNT(CASE WHEN event = 'name_1' THEN 1 END) > 0 AND
              COUNT(CASE WHEN event = 'name_2' THEN 1 END) > 0 THEN 1 END AS "group"
FROM yourTable
GROUP BY user_id
ORDER BY user_id;

请注意,这种方法非常高效,因为它只需要对整个表进行一次遍历。

关于sql - 根据具有特定值的 ID 创建自定义组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77052722/

相关文章:

mysql - 使用索引对 MYSQL 进行计数查询优化

sql - 如何使用 CASE 来更改从数据库检索的数据

python - 大查询存储。 Python。并行读取多个流(多处理)

google-bigquery - 确定加载作业的实际错误

mysql - 是否可以使用 SQL 将可执行代码存储到表记录中

mysql - 如何使用 2 个条件将多行从一个表复制到另一个表

sql - 在BigQuery中格式化日期

sql - 有没有一种方便的方法来重置由分析函数创建的运行计数?

java - 在 Hibernate 中使用 LIKE %

sql - BigQuery 中的 EXP() 返回浮点错误