Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
Есть таблица

Date         Platform    ID
2016-01	Test1	1
2016-01	Test1	2
2016-01	Test2	1
2016-01	Test2	2
2016-01	Test3	2
2016-01	Test3        2
2016-01	Test3	1
2016-01	Test3	3
2016-01	Test4	1
2016-01	Test4	2
2016-01	Test4	3
2016-01	Test4	4
2016-01	Test4	5
2016-01	Test4	6


Мне надо вывести количество уникальных ID которых входят в групп Test4 и рядом количество уникальных значений, которые входят только в Test4 (а данном случае)

То есть на выходе должно быть
Test4 |6 | 3

Ну можно и другие данные из группировок вывести

Мне главное посмотреть как получить которые входят только в Test4
12 окт 17, 13:34    [20863993]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
пушок лошок
Guest
-=Koba=-,

with t(dt_chr, platform, id) as
(
   select  '2016-01',	'Test1',	1 from dual union all
   select  '2016-01',	'Test1',	2 from dual union all
   select  '2016-01',	'Test2',	1 from dual union all
   select  '2016-01',	'Test2',	2 from dual union all
   select  '2016-01',	'Test3',	2 from dual union all
   select  '2016-01',	'Test3',  2 from dual union all
   select  '2016-01',	'Test3',	1 from dual union all
   select  '2016-01',	'Test3',	3 from dual union all
   select  '2016-01',	'Test4',	1 from dual union all
   select  '2016-01',	'Test4',	2 from dual union all
   select  '2016-01',	'Test4',	3 from dual union all
   select  '2016-01',	'Test4',	4 from dual union all
   select  '2016-01',	'Test4',	5 from dual union all
   select  '2016-01',	'Test4',	6 from dual 
),
t2(id) as
(
  select id from t where platform <> 'Test4'
)
select t.platform, count(distinct t.id), count(distinct t2.id) 
from      t
left join t2 on t.id = t2.id
where platform = 'Test4'
group by platform;
12 окт 17, 13:49    [20864056]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
Благодарю за помощь в направлении
12 окт 17, 13:54    [20864090]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 355
пушок лошок,

автор
Мне главное посмотреть как получить которые входят только в Test4


.....
stax
12 окт 17, 14:23    [20864213]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
пушок лошок
Guest
Stax, ?
12 окт 17, 15:03    [20864421]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
А можно ли наложить данное решение сюда?

/* Formatted on 12.10.2017 15:01:06 (QP5 v5.313) */
WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)
  SELECT operation,
		 SUM (a),
		 SUM (b),
		 SUM (c),
		 SUM (d)
	FROM (SELECT *
			FROM (	SELECT operation_time AS operation, platform, USER_ID
					  FROM t
					 WHERE platform IN ('Test1',
										'Test2',
										'Test3',
										'Test4')
				  GROUP BY GROUPING SETS ((operation_time, PLATFORM, USER_ID), (PLATFORM, USER_ID)))
				 PIVOT
					 (COUNT (*) FOR platform IN ('Test1' AS A, 'Test2' AS B, 'Test3' AS C, 'Test4' AS D)))
GROUP BY operation
ORDER BY operation


2016-01	1	1	1	1
2016-02	1	1	1	1
2016-03	0	0	1	1
2016-04	0	0	1	1
2016-05	0	0	0	1
2016-06	0	0	0	1
        	2	2	3	6


Тут подсчитывают количество уникальных вхождений в платформу за период
Мне нужна 5 колонка для test4
2016-01	1	1	1	1   0
2016-02	1	1	1	1   0
2016-03	0	0	1	1   0
2016-04	0	0	1	1   1
2016-05	0	0	0	1   1
2016-06	0	0	0	1   1
        	2	2	3	6   3


У test4 за период 2016-01, 2016-02, 2016-03 входят в другие группы, не считаются,
А 2016-04б 2016-05, 2016-06 уже подходят
12 окт 17, 15:06    [20864432]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 333
-=Koba=-,

Постановка задачи сформулирована .... не достаточно точно
Надо что-то такое?

WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)


	SELECT platform, count(distinct USER_ID) cnt_for_all,
	     count(distinct 
	                    case when platform != 'Test4' or operation_time in ('2016-01', '2016-02', '2016-03') then null
	                    else USER_ID end
	          ) cnt_for_4
					  FROM t
					 WHERE platform IN ('Test1',
										'Test2',
										'Test3',
										'Test4')
group by platform
12 окт 17, 15:29    [20864539]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
MaximaXXL
-=Koba=-,

Постановка задачи сформулирована .... не достаточно точно
Надо что-то такое?

WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)


	SELECT platform, count(distinct USER_ID) cnt_for_all,
	     count(distinct 
	                    case when platform != 'Test4' or operation_time in ('2016-01', '2016-02', '2016-03') then null
	                    else USER_ID end
	          ) cnt_for_4
					  FROM t
					 WHERE platform IN ('Test1',
										'Test2',
										'Test3',
										'Test4')
group by platform

Да но у вас привязка
or operation_time in ('2016-01', '2016-02', '2016-03')
12 окт 17, 15:39    [20864602]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)


Мне надо посчитать число уникальных вхождений в platform по периодам

2016-01	1	1	1	1
2016-02	1	1	1	1
2016-03	0	0	1	1
2016-04	0	0	1	1
2016-05	0	0	0	1
2016-06	0	0	0	1
	2	2	3	6


Это я сделал работает
Мне нужна еще одна колонка для test4 тоже самое уникальное значение в platform по периодам, но плюс еще условие, чтоб USER_ID чтоб былоьше за этот период нигде не появлялся

Удовлетворяет
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL
12 окт 17, 15:43    [20864617]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
AmKad
Member

Откуда:
Сообщений: 4582
Вся тема завалена селектами из юнионоллов. Где тот единственный полный и непротиворечивый пост, из которого можно понять, что требуется автору?
12 окт 17, 15:50    [20864647]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
AmKad
Вся тема завалена селектами из юнионоллов. Где тот единственный полный и непротиворечивый пост, из которого можно понять, что требуется автору?

Последний перед вами
12 окт 17, 15:54    [20864669]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 355
пушок лошок
Stax, ?


with t(dt_chr, platform, id) as
(
   select  '2016-01',      'Test1',        1 from dual union all
   select  '2016-01',      'Test1',        2 from dual union all
   select  '2016-01',      'Test2',        1 from dual union all
   select  '2016-01',      'Test2',        2 from dual union all
   select  '2016-01',      'Test3',        2 from dual union all
   select  '2016-01',      'Test3',  2 from dual union all
   select  '2016-01',      'Test3',        1 from dual union all
   select  '2016-01',      'Test3',        3 from dual union all
   select  '2016-01',      'Test4',        1 from dual union all
   select  '2016-01',      'Test4',        2 from dual union all
   select  '2016-01',      'Test4',        3 from dual union all
   select  '2016-01',      'Test4',        4 from dual union all
   select  '2016-01',      'Test4',        5 from dual union all
   select  '2016-01',      'Test4',        7 from dual union all
   select  '2016-01',      'Test4',        7 from dual union all
   select  '2016-01',      'Test4',        8 from dual union all
   select  '2016-01',      'Test4',        6 from dual
),
t2(id) as
(
  select id from t where platform <> 'Test4'
)
select t.platform, count(distinct t.id), count(distinct t2.id)
from      t
left join t2 on t.id = t2.id
where platform = 'Test4'
group by platform
/
PLATF COUNT(DISTINCTT.ID) COUNT(DISTINCTT2.ID)
----- ------------------- --------------------
Test4                   8                    3


я так понял что надо 7 вместо 5

.....
stax
12 окт 17, 16:08    [20864747]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 355
-=Koba=-,

посчитайте отдельно и присоедените к пивоту

ps
по ид индекс есть?


......
stax
12 окт 17, 16:12    [20864761]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
Да так точно

/* Formatted on 12.10.2017 16:14:30 (QP5 v5.313) */
WITH
	t (id, operation_time, platform, USER_ID) AS
		(SELECT 1, '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT 2, '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT 3, '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT 4, '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT 5, '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT 6, '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT 7, '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT 8, '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT 9, '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT 10, '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT 11, '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT 12, '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT 13, '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT 14, '2016-06', 'Test4', 6 FROM DUAL)
SELECT *
  FROM t
12 окт 17, 16:14    [20864771]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
Stax
-=Koba=-,

посчитайте отдельно и присоедените к пивоту

ps
по ид индекс есть?


......
stax


Так это и вопрос как проверить, что за данный период user_id в других платформах кроме test4 не присутствует, по join уже соединю их
12 окт 17, 16:17    [20864782]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 355
-=Koba=-,

влоб,
N проходов по таблічке, не оптимально

WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 8 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)
,t4 as
(SELECT count(distinct user_id) c4 FROM t t1
 WHERE platform IN ('Test4')
 and not exists (select 1 from t t2 where t2.user_id=t1.user_id 
                   and t2.platform IN ('Test1','Test2','Test3'))
)
,p as (
  SELECT operation,
		 SUM (a),
		 SUM (b),
		 SUM (c),
		 SUM (d)
	FROM (SELECT *
			FROM (	SELECT operation_time AS operation, platform, USER_ID
					  FROM t
					 WHERE platform IN ('Test1',
										'Test2',
										'Test3',
										'Test4')
				  GROUP BY GROUPING SETS ((operation_time, PLATFORM, USER_ID), (PLATFORM, USER_ID)))
				 PIVOT
					 (COUNT (*) FOR platform IN ('Test1' AS A, 'Test2' AS B, 'Test3' AS C, 'Test4' AS D)))
GROUP BY operation
)
select p.*,decode(operation,null,c4) c4 from p,t4
ORDER BY operation
/
SQL> /

OPERATI     SUM(A)     SUM(B)     SUM(C)     SUM(D)         C4
------- ---------- ---------- ---------- ---------- ----------
2016-01          1          1          1          1
2016-02          1          1          1          1
2016-03          0          0          1          1
2016-04          0          0          1          1
2016-05          0          0          0          3
2016-06          0          0          0          1
                 2          2          3          8          5

7 rows selected.


.....
stax
12 окт 17, 16:32    [20864847]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16093
-=Koba=-
Так это и вопрос как проверить, что за данный период user_id в других платформах кроме test4 не присутствует, по join уже соединю их
select platform, count(*) from (     
select user_id, min(platform) platform
from t     
group by user_id
having count(distinct platform) = 1
) group by platform
;     
12 окт 17, 19:50    [20865494]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1832
Благодарю за помощь
12 окт 17, 20:49    [20865631]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 333
-=Koba=-,

Тогда так попробуй
WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 8 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)
		 
   
select platform, count(distinct USER_ID) cnt_for_all, count(distinct decode(Min_pl_4_ID,'Test4',USER_ID)) cnt_for_4
from (
       select operation_time, platform, USER_ID, First_Value(platform) OVER (partition by user_id ORDER BY decode(platform,'Test4',1,0) ) Min_pl_4_ID
       from t)
group by platform
12 окт 17, 20:54    [20865639]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 333
andrey_anonymous,

Странный ответ для такого случая:
WITH
	t (operation_time, platform, USER_ID) AS
		(SELECT '2016-01', 'Test1', 10 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test1', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test2', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test2', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test3', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test3', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test3', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-01', 'Test4', 1 FROM DUAL
		 UNION ALL
		 SELECT '2016-02', 'Test4', 2 FROM DUAL
		 UNION ALL
		 SELECT '2016-03', 'Test4', 3 FROM DUAL
		 UNION ALL
		 SELECT '2016-04', 'Test4', 4 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 5 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 7 FROM DUAL
		 UNION ALL
		 SELECT '2016-05', 'Test4', 8 FROM DUAL
		 UNION ALL
		 SELECT '2016-06', 'Test4', 6 FROM DUAL)
		 

select platform, count(*) from (     
select user_id, min(platform) platform
from t     
group by user_id
having count(distinct platform) = 1
) group by platform
;   

PLATFORM	COUNT(*)
Test1	 1
Test4	 5
12 окт 17, 21:05    [20865657]     Ответить | Цитировать Сообщить модератору
 Re: Групировка по уникальному вхождению  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16093
MaximaXXL
andrey_anonymous,

Странный ответ для такого случая:

4,5,6,7,8 - уникальны по выборке для Test4, 5 штук
10 - уникально для Test1, 1 штука

В момент написания ответа я не рассматривал хардкод Test4 - просто иллюстрировал способ выделить "уникальность"

...ради забавы порешал общую задачку ТС без самосоединений на collect + multiset except (с хардкодом Test4) и на аналитике - фунцикляется :)
Полагаю, можно также прикрутить модельку и XML - но уже лень.
12 окт 17, 21:48    [20865727]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить