sql - 如果值存在于多个类别中,如何分隔分组

标签 sql postgresql postgresql-9.2

我有一个这样的表:

CREATE TEMP TABLE users_category 
(
    user_id int,
    category_id int
);

insert into users_category (user_id, category_id)
values (100, 1), (100, 2), (103, 4), (105, 4), (106, 2), (107, 1)

然后我尝试计算有多少用户使用以下类别:

select category_id,count(*)
from users_category
group by category_id

响应是:

category_id   count
4               2
1               2
2               2

如果用户存在多个类别,如何添加逻辑,在其他类别中计算。

例如,用户 100 存在于类别 1 和类别 2 中,我不会为这两个类别计算它。我想添加新类别例如。 99 并且必须在那里添加用户。

响应必须类似于:

category_id  count
4             2
1             1
2             1
99            1  (user who was in both category)

怎么做?

最佳答案

您需要首先在用户级别进行聚合,然后在类别级别进行聚合:

select category_id, count(*)
from (select user_id,
             (case when min(category_id) = max(category_id) then min(category_id)
                   else 99
              end) as category_id
      from users_category uc
      group by user_id
     ) uc
group by category_id;

关于sql - 如果值存在于多个类别中,如何分隔分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505657/

相关文章:

sql - 获取受更新或插入影响的行数

sql - 我怎样才能优化这个查询(或者有更好的方法)?

mysql - 根据第二个表的另一个值在第一个表中选择一个值(sql)

sql - 使用派生表时出现列无效错误

PostgreSQL 游标错误

mysql - 定期将数据从 SQL 镜像到 NoSQL 的最佳方法?

sql - 获取列中具有前 2 个值之一的所有行

mysql - 基于在数据库中搜索整数或长字符串(唯一)的性能?

database - PGError : ERROR: permission denied for relation (when using Heroku)

postgresql - 创建一个临时表(如果不存在)以用于自定义过程