2016-07-21 14 views
2

Ich habe eine Tabelle wie folgt aus:Wie Gruppe zu trennen, indem, wenn der Wert existiert in mehreren Kategorien

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) 

Dann zu berechnen Ich versuche, wie viel Nutzer verwenden Kategorien wie:

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

Antwort ist:

Wie Logik hinzufügen, wenn Benutzer in mehr als einer Kategorie existiert, berechnen Sie es in andere Kategorie.

Zum Beispiel existiert Benutzer 100 in Kategorie 1 und 2 und ich werde es nicht für beide Kategorie-s berechnen. Ich möchte eine neue Kategorie hinzufügen. 99 und müssen dort Benutzer hinzufügen.

Antwort muss wie:

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

Wie es zu tun?

Antwort

2

Sie müssen zuerst auf der Benutzerebene und dann auf Kategorieebene aggregieren:

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

danke es funktioniert gut – GeoVIP