Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Последовательный выбор и подсчет строк по изменяющемуся параметру. / 13 сообщений из 13, страница 1 из 1
07.05.2018, 08:49
    #39641196
Вадим_T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Добрый день.

Помогите, пожалуйста с запросом:

SELECT 'Группа№1' , sum(nvl(zn.znach),0)
FROM (
SELECT count(*) as znach FROM primary
WHERE OPEN_TIME >= SYSDATE-1
and (DEADLINE - SYSDATE)*24 < 8 and STATUS='Открыт'
and ITEM in ('K721', 'K563') group by ITEM
) zn;

Мне необходимо подсчитать такое для четырех групп:
ITEM in ('K721', 'K563'), ITEM in ('K322', 'K055') , ITEM in ('K129', 'K616', 'K255'), ITEM in ('K361', 'K076', 'K982', 'K451').
Не хочется делать отдельно 4 практически идентичных запроса (или объединять их через UNION ALL)
Возможно ли сделать один общий запрос, чтобы в результате было 4 строки с количеством по 4 группам - № 1,2,3,4?
...
Рейтинг: 0 / 0
07.05.2018, 09:09
    #39641203
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Вадим_T,

Код: plsql
1.
2.
3.
4.
5.
with мап(итем, группа) as (
select 'K721', 'Группа№1' from dual union all
...
select 'K451', 'Группа№4' from dual
)
...
Рейтинг: 0 / 0
07.05.2018, 09:45
    #39641221
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Вадим_T,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' ;
  when ITEM in ('K322', 'K055') then 'Группа№2' ;
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
  else '?????'  end
,nvl(sum(zn.znach),0) ss
....
where ITEM in ('K721', 'K563', все коды) 
group by 
CASE 
 when ITEM in ('K721', 'K563') then 'Группа№1' ;
 when ITEM in ('K322', 'K055') then 'Группа№1' ;
 when ITEM in ('K129', 'K616', 'K255') then 'Группа№1' ;
 when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№1' ;
 else '?????'  end



.....
stax
...
Рейтинг: 0 / 0
07.05.2018, 09:48
    #39641225
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Stax,

ой, count(*)

....
stax
...
Рейтинг: 0 / 0
07.05.2018, 10:52
    #39641263
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Вадим_T,

А не подскажите тайный смысл такой конструкции?
Код: plsql
1.
and (DEADLINE - SYSDATE)*24 < 8 


(DEADLINE - SYSDATE) в днях, *24 - ну в бухгалтерии есть понятие 22 рабочих дня в месяце .... но 24?
Ну и 8 - это 8 месяцев ... 2/3 года, Вы триместрами работаете?
...
Рейтинг: 0 / 0
07.05.2018, 11:09
    #39641271
Вадим_T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
MaximaXXL,
Переводим дни в часы и сравниваем с 8.
Вычисляем где до дедлайна осталось меньше 8 часов
...
Рейтинг: 0 / 0
07.05.2018, 11:36
    #39641294
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Переводим дни в часы

Дни в часы переводятся делением на 24.
...
Рейтинг: 0 / 0
07.05.2018, 11:41
    #39641300
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
dmdmdm,
А ну покаж магию.... ажно хотся взглянуть как ты будешь дялить....


Вадим_T,
всегда удивлялся намеренному извращению отдельных личностей, зачем вы не даете ораклу пользоваться индексами буде таковые созданы?
...
Рейтинг: 0 / 0
07.05.2018, 12:10
    #39641328
Вадим_T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Vint,
Данные извращения от незнания. Я не разбираюсь в индексах.
+ прав на чужую БД и индексы у меня нету, только на чтение из таблиц.
...
Рейтинг: 0 / 0
07.05.2018, 12:14
    #39641330
Вадим_T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Stax,
Большое Спасибо!
Пока собрать sql запрос не получилось, нет времени.
О результатах сообщу :)
...
Рейтинг: 0 / 0
08.05.2018, 06:59
    #39641751
Вадим_T
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
StaxВадим_T,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' ;
  when ITEM in ('K322', 'K055') then 'Группа№2' ;
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
  else '?????'  end
,nvl(sum(zn.znach),0) ss
....
where ITEM in ('K721', 'K563', все коды) 
group by 
CASE 
 when ITEM in ('K721', 'K563') then 'Группа№1' ;
 when ITEM in ('K322', 'K055') then 'Группа№2' ;
 when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' ;
 when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' ;
 else '?????'  end



.....
stax

Спасибо! Подскажите, пожалуйста, а как можно срастить 2 таких запроса через left outer join?
Ну т.е. группы идентичные (первый столбец), но количество (count) из других таблиц отличается и дописывается 3 столбцом.
Я что-то делаю не так с "ON" ? :

select
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end as G1
, count(*) as SS1 from primary P1
left outer join
(
select
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' as G2 end
, count(*) as SS2 from primary2
where ITEM in ('K721', 'K563', все коды)
group by
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end
) P2
ON P1.G1 = P2.G2
where ITEM in ('K721', 'K563', все коды)
group by
CASE
when ITEM in ('K721', 'K563') then 'Группа№1'
when ITEM in ('K322', 'K055') then 'Группа№2'
when ITEM in ('K129', 'K616', 'K255') then 'Группа№3'
when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4'
else '?????' end;
...
Рейтинг: 0 / 0
08.05.2018, 09:06
    #39641799
stells2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
MaximaXXL,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE 
  D1 DATE := SYSDATE+5;
  D2 DATE := SYSDATE+5+6/24;
  D3 DATE := ADD_MONTHS(SYSDATE+6/24,5);
BEGIN
  DBMS_OUTPUT.PUT_LINE('D1 - SYSDATE: '||(D1 - SYSDATE)||'  TRUNC(D1 - SYSDATE):'||TRUNC(D1 - SYSDATE));
  DBMS_OUTPUT.PUT_LINE('D2 - SYSDATE: '||(D2 - SYSDATE)||'  TRUNC(D2 - SYSDATE):'||TRUNC(D2 - SYSDATE));
  DBMS_OUTPUT.PUT_LINE('D3 - SYSDATE: '||(D3 - SYSDATE)||'  TRUNC(D3 - SYSDATE):'||TRUNC(D3 - SYSDATE));
END;


Код: plaintext
1.
2.
3.
D1 - SYSDATE: 5           TRUNC(D1 - SYSDATE):5
D2 - SYSDATE: 5,25      TRUNC(D2 - SYSDATE):5
D3 - SYSDATE: 153,25  TRUNC(D3 - SYSDATE):153
разница между датами - целое число = дни, дробное = доля суток. :)

Вадим_T,
Может так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
 DECODE(ITEM,'K721',1,'K563',1,'K322',2,'K055',2,'K129',3, 'K616', 3,'K255',3,'K361',4, 'K076',4, 'K982',4, 'K451' ,4) GR_NUM,
 count(*) as znach 
FROM primary
WHERE OPEN_TIME >= SYSDATE-1 and (DEADLINE - SYSDATE)*24 < 8 and STATUS='Открыт'
and ITEM in ('K721', 'K563','K322', 'K055','K129', 'K616', 'K255','K361', 'K076', 'K982', 'K451')
group by DECODE(ITEM,'K721',1,'K563',1,'K322',2,'K055',2,'K129',3, 'K616', 3,'K255',3,'K361',4, 'K076',4, 'K982',4, 'K451' ,4)
ORDER BY 1


GR_NUMZNACH18727631264105
...
Рейтинг: 0 / 0
08.05.2018, 13:01
    #39641973
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последовательный выбор и подсчет строк по изменяющемуся параметру.
Вадим_TСпасибо! Подскажите, пожалуйста, а как можно срастить 2 таких запроса через left outer join?
Ну т.е. группы идентичные (первый столбец), но количество (count) из других таблиц отличается и дописывается 3 столбцом.
Я что-то делаю не так с "ON" ? :



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
with primary (item) as (
select 'K721' from dual union all
select 'K563' from dual union all
select 'K111' from dual union all
select 'K322' from dual)
,primary2 (item) as (
select 'K055' from dual union all
select 'K361' from dual union all
select 'K111' from dual union all
select 'K361' from dual union all
select 'K255' from dual)
select nvl(z1.g1,z2.g1) g,z1.ss1 ss1,z2.ss1 ss2 From 
(
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end as G1
, count(*) as SS1 
from primary P1 where item in ('K721','K563','K322')
group by
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end
) z1 
full outer join
(
select
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end as G1
, count(*) as SS1 
from primary2 P1 where item in ('K563','K055','K076','K361')
group by
 CASE 
  when ITEM in ('K721', 'K563') then 'Группа№1' 
  when ITEM in ('K322', 'K055') then 'Группа№2' 
  when ITEM in ('K129', 'K616', 'K255') then 'Группа№3' 
  when ITEM in ('K361', 'K076', 'K982', 'K451') then 'Группа№4' 
  else '?????'  end
) z2
on z1.g1=z2.g1
order by 1
/
SQL> /

G               SS1        SS2
-------- ---------- ----------
Группа№1          2
Группа№2          1          1
Группа№4                     2
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Последовательный выбор и подсчет строк по изменяющемуся параметру. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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