2016-07-21 2 views
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 

Response is:

category_id count 
4    2 
1    2 
2    2 

Как добавить логику, если пользователи более чем в одной категории, вычислите ее в других категориях.

Например, пользователь 100 существует в категориях 1 и 2, и я не буду рассчитать его для обеих категорий. Я хочу добавить новую категорию ex. 99 и должны добавлять туда пользователей.

Ответ должен быть как:

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

Как это сделать?

ответ

2

Вам необходимо агрегировать первым на уровне пользователя, а затем на уровне категории:

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; 
+0

спасибо, что хорошо работает – GeoVIP

Смежные вопросы