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

Posted

技术标签:

【中文标题】如果值存在于多个类别中,如何分隔分组依据【英文标题】:How to separate group by if value exists in multiple categories 【发布时间】:2016-07-21 13:30:20 【问题描述】:

我有一张这样的桌子:

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)

怎么做?

【问题讨论】:

【参考方案1】:

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

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;

【讨论】:

以上是关于如果值存在于多个类别中,如何分隔分组依据的主要内容,如果未能解决你的问题,请参考以下文章

如何检查项目是不是存在于多个数组中

如何在Javascript中用逗号分隔的值匹配数组?

knn算法如何选择一个最佳k值

即使没有结果,如何在分组的 MS Access 报告中显示类别

在 Pandas 中删除未使用类别的更快方法?

Flutter如何根据某个值从firebase对列表进行分组