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

Откуда: Минск
Сообщений: 1972
В таблице имеется поле category
Category A
Category B
Category C


Делаю группировку

Category A 10
Category B 20
Category C 30
Other        50


Хочу получить на выходе вот такую структуру
Category A 10
Category B 20
Category C 30
Other        50
Category A + Category B + Other 80 (тут могу разные пересечения)
Category A + Category B + Category C + Other 110 (тут все)
18 май 17, 11:26    [20492291]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6712
-=Koba=-,

grouping sets, rollup
18 май 17, 11:29    [20492311]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

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

grouping sets, rollup

Спасибо за направление
18 май 17, 11:43    [20492365]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
Сгруппировал по периодам даты
Реально ли перевернуть колонку paltform и сделать ее колонками
Число их может меняться но максимально из выше сказанного условия будет 6

К сообщению приложен файл. Размер - 37Kb
18 май 17, 12:30    [20492525]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
-=Koba=-,

pivot
18 май 17, 12:39    [20492544]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
stax..
Guest
-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax
18 май 17, 13:51    [20492906]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
stax..
-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax


Не совсем понял
18 май 17, 14:05    [20492974]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
stax..
Guest
-=Koba=-
stax..
-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax


Не совсем понял

убрать подзапрос
вместо "select distinct..." count(distinct

.....
stax
18 май 17, 14:10    [20492987]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
stax..
-=Koba=-
пропущено...


Не совсем понял

убрать подзапрос
вместо "select distinct..." count(distinct

.....
stax


спасибо за подсказку
18 май 17, 16:48    [20493577]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
-=Koba=-
stax..
пропущено...

убрать подзапрос
вместо "select distinct..." count(distinct

.....
stax


спасибо за подсказку


Ну тут от условия над плясать
select to_char(operation, 'YYYY-MM'), platform, count(*)
   from( select distinct platform, user_id, trunc(operation_time) as operation
            from Auth_Info
          .........
          )
group by to_char(operation, 'YYYY-MM'), platform
order by 1

этот селект вернет сколько "дней"разные пользователи были в системе
т.е. если пользователь "A" заходил каждый день в январе то count(*) = 31

для варианта
select to_char(operation_time, 'YYYY-MM'), platform, count(distinct user_id)
            from Auth_Info
          .........
group by to_char(operation, 'YYYY-MM'), platform
order by 1

условие уже сколько пользователей ХОТЯ-БЫ раз в этом месяце заходили в систему
т.е. если пользователь "A" заходил каждый день в январе то count(distinct user_id) = 1

Т.е. оба варианта рабочие но считают/выводят разные данные и тут все от условия задачи зависит ...
18 май 17, 19:34    [20494000]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
Еще вопрос а можно ли использовать условия в группировке

Например мне надо посчитать число
удовлетворяющих как пример

(A || B) && С - вывод 2 - Num присутствует в категории A или B и обязательно в С
(A || B) && !С - вывод 0 - Num присутствует в категории A или B и обязательно нет  в С
(A || B) || С - вывод 3 - Num присутствует в категории A или B или С


К сообщению приложен файл. Размер - 2Kb
19 май 17, 10:14    [20495118]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
Вот сейчас непонятно было что Вам надо:

-=Koba=-
Еще вопрос а можно ли использовать условия в группировке


Ответ: можно


-=Koba=-
Например мне надо посчитать число
удовлетворяющих как пример

(A || B) && С - вывод 2 - Num присутствует в категории A или B и обязательно в С
(A || B) && !С - вывод 0 - Num присутствует в категории A или B и обязательно нет  в С
(A || B) || С - вывод 3 - Num присутствует в категории A или B или С



Не понял

Если надо посчитать число 3 разных колонки - тогда
count( case when (A or B) and C then 1 end) as F1,
count( case when (A or B) and not C then 1 end) as F2,
count( case when A or B or C then 1 end) as F3


Если это 1 поле с константным выводом
case when (A or B) and C then 2
       when (A or B) and not C then 0
       when A or B or C then 3
end as F1
19 май 17, 10:29    [20495200]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
MaximaXXL
Вот сейчас непонятно было что Вам надо:

-=Koba=-
Еще вопрос а можно ли использовать условия в группировке


Ответ: можно


-=Koba=-
Например мне надо посчитать число
удовлетворяющих как пример

(A || B) && С - вывод 2 - Num присутствует в категории A или B и обязательно в С
(A || B) && !С - вывод 0 - Num присутствует в категории A или B и обязательно нет  в С
(A || B) || С - вывод 3 - Num присутствует в категории A или B или С



Не понял

Если надо посчитать число 3 разных колонки - тогда
count( case when (A or B) and C then 1 end) as F1,
count( case when (A or B) and not C then 1 end) as F2,
count( case when A or B or C then 1 end) as F3


Если это 1 поле с константным выводом
case when (A or B) and C then 2
       when (A or B) and not C then 0
       when A or B or C then 3
end as F1


Нет это не константа, а количество таких совпадение
(A || B) && С удовлетворяет num=1 и num=2 от сюда count - 2
19 май 17, 14:24    [20496552]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
MaximaXXL
Member

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

Нет это не константа, а количество таких совпадение
(A || B) && С удовлетворяет num=1 и num=2 от сюда count - 2


Я не понимаю что надо группировать с чем ...

т.е. что надо, группировку для одной даты? для одного NUM ... что должно удовлетворять ((CAT = 'A' or CAT = 'B') and CAT = 'C')?


Напиши плиз для
with t1 as(
select to_date('01.05.2017','dd.mm.yyyy') Dat, 'A' Cat, 1 Num from dual union all
select to_date('01.05.2017','dd.mm.yyyy') Dat, 'A' Cat, 1 Num from dual union all
select to_date('01.05.2017','dd.mm.yyyy') Dat, 'A' Cat, 2 Num from dual union all
select to_date('01.05.2017','dd.mm.yyyy') Dat, 'B' Cat, 1 Num from dual union all
select to_date('02.05.2017','dd.mm.yyyy') Dat, 'C' Cat, 1 Num from dual union all
select to_date('02.05.2017','dd.mm.yyyy') Dat, 'C' Cat, 2 Num from dual union all
select to_date('02.05.2017','dd.mm.yyyy') Dat, 'C' Cat, 3 Num from dual union all
select to_date('01.04.2017','dd.mm.yyyy') Dat, 'A' Cat, 1 Num from dual )


какой результат ты хочешь увидеть для этой таблицы?
19 май 17, 15:53    [20496897]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

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

Я хочу узнать число num? которые удовлетворяют условию

(A || B) && С

num = 1 - удовлетворяет, присутствует в A, присутствует в B и присутствует в C
num = 2 - удовлетворяет, присутствует в A и присутствует в C
num = 3 - не удовлетворяет, присутствует в C только (выражение (A || B) && С - ложно )

Итого для num in (1..3) два удовлетворения

В итоговой таблице вывести что-то вроде

COL             _|_ Count
(A || B) && С _|_ 2
22 май 17, 15:11    [20501523]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
MaximaXXL
Member

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

Как частный случай могу предложить такой например

select Count( distinct
        case listagg(Cat) within group (ORDER BY Cat) when 'BC' then Num
      end) Cnt
from 
(select distinct Decode(Cat,'A','B',Cat) Cat, Num from t1)
group by Num
22 май 17, 15:58    [20501711]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

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

Как частный случай могу предложить такой например

select Count( distinct
        case listagg(Cat) within group (ORDER BY Cat) when 'BC' then Num
      end) Cnt
from 
(select distinct Decode(Cat,'A','B',Cat) Cat, Num from t1)
group by Num


И остальные условия объединть через unio получается?
22 май 17, 16:22    [20501799]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 652
[quot -=Koba=-]
MaximaXXL
-=Koba=-,


И остальные условия объединть через unio получается?


Да сложно понять что тебе надо =)

можно так например

select la, Count(Distinct Num) cnt
from(
select case listagg(Cat_) within group (ORDER BY Cat_) when 'BC' then '(A||B)C'
                                                     when 'B' then '(A||B)!C'
                                                     when 'C' then '(A||B)||C'
                                                     end la
,Num
from 
(select distinct Decode(Cat,'A','B',Cat) Cat_, Num from t1)
group by Num)
group by la
22 май 17, 16:38    [20501848]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

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

Да спасибо, объяснять не мой конек =((
буду смотреть твои примеры... спасибо за напралвение
22 май 17, 16:43    [20501881]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
А как можно группировать с учетом предыдущих данных??

То есть ест таблица пользователей

ID DATE_CR


Группирую по месяцам
SELECT ... GROUP BY TO_CHAR (operation_time, 'YYYY-MM')



А я еще хочу учитывать предыдущие месяцы

У меня так, число зарегиных по месяца
Январь 10
Февраль 3
Март 5


Хочу получить
Январь 10
Февраль 13
Март 18
26 май 17, 14:42    [20515032]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6712
-=Koba=-,

sum() over(parititon by .. order by.. rows/range between ..)
26 май 17, 16:35    [20515553]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
Можно ли избавиться от внешнего sql select
SELECT operation, SUM (userCount) OVER (ORDER BY operation)
  FROM (SELECT *
		  FROM (  SELECT TO_CHAR (created, 'YYYY-MM') AS operation, COUNT (DISTINCT id) AS userCount
					FROM users
				GROUP BY TO_CHAR (created, 'YYYY-MM')))



Чтоб считал сразу count и суммировал с предыдущей строчкой
29 май 17, 14:51    [20520234]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
stax..
Guest
-=Koba=-,
SQL> select t.*,
  2  sum(j) over (order by deptno) jj
  3   from (
  4  select deptno,count(distinct job) j from emp group by deptno) t
  5  /

    DEPTNO          J         JJ
---------- ---------- ----------
        10          3          3
        20          3          6
        30          3          9

SQL> select deptno,count(distinct job) j
  2  ,sum(count(distinct job)) over (order by deptno) jj
  3  from emp group by deptno
  4  /

    DEPTNO          J         JJ
---------- ---------- ----------
        10          3          3
        20          3          6
        30          3          9



.....
stax
29 май 17, 15:11    [20520353]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
-=Koba=-
Member

Откуда: Минск
Сообщений: 1972
stax..,

Спасибо за помощь
29 май 17, 15:15    [20520368]     Ответить | Цитировать Сообщить модератору
 Re: Group с пересечением  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
-=Koba=-,

Когда ты впервые понял, что ты боишься "внешних sql select"?
Можешь ли вспомнить что послужило причиной?
Здесь могут помочь побороть иррациональные страхи.
29 май 17, 15:17    [20520376]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить