powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Group с пересечением
25 сообщений из 27, страница 1 из 2
Group с пересечением
    #39455246
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице имеется поле category
Код: plsql
1.
2.
3.
Category A
Category B
Category C



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

Код: plsql
1.
2.
3.
4.
Category A 10
Category B 20
Category C 30
Other        50



Хочу получить на выходе вот такую структуру
Код: plsql
1.
2.
3.
4.
5.
6.
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 (тут все)
...
Рейтинг: 0 / 0
Group с пересечением
    #39455249
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

grouping sets, rollup
...
Рейтинг: 0 / 0
Group с пересечением
    #39455259
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env-=Koba=-,

grouping sets, rollup
Спасибо за направление
...
Рейтинг: 0 / 0
Group с пересечением
    #39455330
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сгруппировал по периодам даты
Реально ли перевернуть колонку paltform и сделать ее колонками
Число их может меняться но максимально из выше сказанного условия будет 6
...
Рейтинг: 0 / 0
Group с пересечением
    #39455337
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

pivot
...
Рейтинг: 0 / 0
Group с пересечением
    #39455388
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax
...
Рейтинг: 0 / 0
Group с пересечением
    #39455405
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax

Не совсем понял
...
Рейтинг: 0 / 0
Group с пересечением
    #39455408
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-stax..-=Koba=-,
не проще ли select ...,count(distinct user_id) ...?

.....
stax

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

.....
stax
...
Рейтинг: 0 / 0
Group с пересечением
    #39455536
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..-=Koba=-пропущено...


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

.....
stax

спасибо за подсказку
...
Рейтинг: 0 / 0
Group с пересечением
    #39455638
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-stax..пропущено...

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

.....
stax

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

Ну тут от условия над плясать
Код: plsql
1.
2.
3.
4.
5.
6.
7.
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

для варианта
Код: plsql
1.
2.
3.
4.
5.
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

Т.е. оба варианта рабочие но считают/выводят разные данные и тут все от условия задачи зависит ...
...
Рейтинг: 0 / 0
Group с пересечением
    #39455867
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос а можно ли использовать условия в группировке

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

Код: plsql
1.
2.
3.
(A || B) && С - вывод 2 - Num присутствует в категории A или B и обязательно в С
(A || B) && !С - вывод 0 - Num присутствует в категории A или B и обязательно нет  в С
(A || B) || С - вывод 3 - Num присутствует в категории A или B или С
...
Рейтинг: 0 / 0
Group с пересечением
    #39455888
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот сейчас непонятно было что Вам надо:

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


Ответ: можно


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

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




Не понял

Если надо посчитать число 3 разных колонки - тогда
Код: plsql
1.
2.
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 поле с константным выводом
Код: plsql
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
Group с пересечением
    #39456154
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLВот сейчас непонятно было что Вам надо:

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


Ответ: можно


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

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




Не понял

Если надо посчитать число 3 разных колонки - тогда
Код: plsql
1.
2.
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 поле с константным выводом
Код: plsql
1.
2.
3.
4.
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
...
Рейтинг: 0 / 0
Group с пересечением
    #39456266
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Нет это не константа, а количество таких совпадение
(A || B) && С удовлетворяет num=1 и num=2 от сюда count - 2

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

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


Напиши плиз для
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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 )



какой результат ты хочешь увидеть для этой таблицы?
...
Рейтинг: 0 / 0
Group с пересечением
    #39457421
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

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

(A || B) && С

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

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

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

Код: plsql
1.
2.
COL             _|_ Count
(A || B) && С _|_ 2
...
Рейтинг: 0 / 0
Group с пересечением
    #39457498
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

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

Код: plsql
1.
2.
3.
4.
5.
6.
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
...
Рейтинг: 0 / 0
Group с пересечением
    #39457524
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL-=Koba=-,

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

Код: plsql
1.
2.
3.
4.
5.
6.
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 получается?
...
Рейтинг: 0 / 0
Group с пересечением
    #39457539
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot -=Koba=-]MaximaXXL-=Koba=-,


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

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

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
...
Рейтинг: 0 / 0
Group с пересечением
    #39457544
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Да спасибо, объяснять не мой конек =((
буду смотреть твои примеры... спасибо за напралвение
...
Рейтинг: 0 / 0
Group с пересечением
    #39460469
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно группировать с учетом предыдущих данных??

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

Код: plsql
1.
ID DATE_CR



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




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

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



Хочу получить
Код: plsql
1.
2.
3.
Январь 10
Февраль 13
Март 18
...
Рейтинг: 0 / 0
Group с пересечением
    #39460566
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

sum() over(parititon by .. order by.. rows/range between ..)
...
Рейтинг: 0 / 0
Group с пересечением
    #39461622
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли избавиться от внешнего sql select
Код: plsql
1.
2.
3.
4.
5.
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 и суммировал с предыдущей строчкой
...
Рейтинг: 0 / 0
Group с пересечением
    #39461643
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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
...
Рейтинг: 0 / 0
Group с пересечением
    #39461647
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Спасибо за помощь
...
Рейтинг: 0 / 0
Group с пересечением
    #39461649
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

Когда ты впервые понял, что ты боишься "внешних sql select"?
Можешь ли вспомнить что послужило причиной?
Здесь могут помочь побороть иррациональные страхи.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Group с пересечением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]