例如,我有下一张桌子.

user_id event action
1111111 name_1 null
1111111 name_2 null
2222222 name_1 null
2222222 name_2 null
2222222 name_3 yes
3333333 name_1 null
3333333 name_2 null
3333333 name_3 no

我需要 Select ID和基于事件和操作的新列

  • %1组ID具有事件%1和%2
  • 2 group-id具有所有3个事件,并且name_3的操作为‘no’
  • 3 group-id具有所有3个事件,并且name_3的操作为‘yes’

因此,所需的输出:

user_id group
1111111 group_1
2222222 group_3
3333333 group_2

推荐答案

使用条件聚合方法,我们可以try :

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相关问答推荐

提取Snowflake SQL中的嵌套键

在postgres中动态计算出现次数并插入到json中

Postgres:对包含数字的字符串列表进行排序

分组多输出访问查询问题

PostgreSQL中的合并命令是原子的,还是需要一些类似于SQL Server版本的内容?

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

基于唯一值在Access查询中创建计数器

我可以在SQL的IN子句中使用比子查询包含的值更少的值吗?

Oracle PL/SQL:解决DBMS输出大小限制的问题

根据是否出现过零来筛选数据(跨多行)

通过UPDATE SELECT更新表时出现问题

从选定记录中提取摘要作为值的划分

如何修复初学者 SQL INNER JOIN 查询错误

SQL Server 查询 WHERE LIKE

如何解释 SQL Server 中的 Foxpro 语法?

将一名成员金额分配给群组内的其他成员

将varchar (7)列转换为datetime

基于字符串的SQL查询

在多个表上递归查找

SQLite 中的过滤运行总和视图