我遇到了以下问题--用这种 struct 做桌子.

user_id permission
25 Denied
25 Permitted
139 Denied
139 Limited
139 Limited
139 Limited

需要根据分类标准(3个类别)将记录分组为one line个"user_id",计算不同的"权限"状态.它应该如下所示:

user_id denied_count limited_count permitted_count
25 1 0 1
139 1 3 0

我try 使用GROUP BY和CASE对以下脚本进行分组:

select user_id, 
       permission, 
       case when permission = 'PERMITTED' then count("permission") else 0 end as permitted_count,
       case when permission = 'LIMITED' then count("permission") else 0 end as limited_count,    
       case when permission = 'DENIED' then count("permission") else 0 end as denied_count                                       
                     from table
                     group by 1,2
                     order by user_id

但用这种方式记录下来:

user_id denied_count limited_count permitted_count
25 1 0 0
25 0 0 1
139 1 0 0
139 0 3 0

请告诉我我哪里错了.

推荐答案

我对BigQuery不太熟悉.如果您从select和group by中删除权限,那么您正在使用的语法可能完全没有问题.

不过,这是一种非常标准的方法:

https://dbfiddle.uk/liKLlSxH

CREATE TABLE permissions (
    user_id INT,
    permission VARCHAR(50)
);

INSERT INTO permissions (user_id, permission) VALUES (25, 'Denied');
INSERT INTO permissions (user_id, permission) VALUES (25, 'Permitted');
INSERT INTO permissions (user_id, permission) VALUES (139, 'Denied');
INSERT INTO permissions (user_id, permission) VALUES (139, 'Limited');
INSERT INTO permissions (user_id, permission) VALUES (139, 'Limited');
INSERT INTO permissions (user_id, permission) VALUES (139, 'Limited');

select user_id,
       sum(case when permission = 'Denied' then 1 else 0 end) as denied_count,
       sum(case when permission = 'Permitted' then 1 else 0 end) as permitted_count,
       sum(case when permission = 'Limited' then 1 else 0 end) as limited_count
  from permissions
 group
    by user_id;

Sql相关问答推荐

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

在SQL中向每个子字节组添加字节行

Microsoft Access UNION将长文本字段限制为255个字符

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

在查询Oracle SQL中创建替代ID

HAVING子句内部过滤的正确方法

SQL数据库规范化与数据插入

用VB.NET在Dapper中实现MS Access数据库顺序透视

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

SQL ORACLE - 查找连续天数

Postgres如何在一个日历周中前进和回填值

如何优化仅返回符合条件的三条记录的查询?

如何获取每个组中最近的n条记录并将它们聚合成数组

计数时如何为所有时间间隔返回 0 而不是什么都不返回

在多个表上递归查找

Django only() 和 values() 不适用于 prefetch_related()

Select 给定类别列表(或更多类别)中的所有事物

连续日期的SQL