Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сгруппировать часть выборки / 6 сообщений из 6, страница 1 из 1
19.10.2016, 05:35:36
    #39329471
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сгруппировать часть выборки
Добрый день!
Есть выборка вида
Код: plsql
1.
2.
3.
4.
5.
6.
select 'Иванов'  emp, '32' procent from dual union
select 'Петров'  emp, '28' procent from dual union
select 'Сидоров' emp, '21' procent from dual union
select 'Арбузов' emp, '10' procent from dual union
select 'Яблоков' emp, '6' procent from dual union
select 'Грушев' emp, '3' procent from dual



Возможно ли из нее запросом получить следующее:
empprocentИванов32Петров28Сидоров21остальные19
?
...
Рейтинг: 0 / 0
19.10.2016, 06:35:18
    #39329478
сгруппировать часть выборки
illionВозможно ли
Код: plsql
1.
2.
3.
4.
5.
6.
select 'emp	procent
Иванов	32
Петров	28
Сидоров	21
остальные	19
' from "Есть выборка вида";
...
Рейтинг: 0 / 0
19.10.2016, 07:11:57
    #39329483
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сгруппировать часть выборки
А критерий-то какой?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
tst> with t1 as (
  2  select 'Иванов'  emp, '32' procent from dual union
  3  select 'Петров'  emp, '28' procent from dual union
  4  select 'Сидоров' emp, '21' procent from dual union
  5  select 'Арбузов' emp, '10' procent from dual union
  6  select 'Яблоков' emp, '6' procent from dual union
  7  select 'Грушев' emp, '3' procent from dual
  8  )
  9  select decode(count(*), 1, max(emp), 'остальные') emp, sum(procent) procent
 10  from t1
 11  group by case when procent>20 then emp end
 12  order by 1
 13  /

EMP          PROCENT
--------- ----------
Иванов            32
Петров            28
Сидоров           21
остальные         19
...
Рейтинг: 0 / 0
19.10.2016, 07:34:55
    #39329490
dbwr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сгруппировать часть выборки
если выбрать первых трёх и остальных, то можно так:
Код: 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.
with z as (
select 'Иванов'  emp, 32 procent from dual union
select 'Петров'  emp, 28 procent from dual union
select 'Сидоров' emp, 21 procent from dual union
select 'Арбузов' emp, 10 procent from dual union
select 'Яблоков' emp,  6 procent from dual union
select 'Грушев'  emp,  3 procent from dual),
 zz as (select emp, procent, 
               row_number() over (order by procent desc) rn
          from z 
  )
select     
      case when rn <= 3 then emp else 'остальные' end As emp,
      sum(procent) sum_pct
  from zz
 group by 
    case when rn <= 3 then emp else 'остальные' end,
    case when rn <= 3 then rn else 4 end;

EMP          SUM_PCT
--------- ----------
Петров            28
Иванов            32
Сидоров           21
остальные         19
...
Рейтинг: 0 / 0
19.10.2016, 08:40:05
    #39329510
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сгруппировать часть выборки
цель - выбрать первых N наиболее отличившихся товарищей.

dbwr , Вячеслав - огромное спасибо за примеры, не знала, что case можно поместить и в group by, пойду экспериментировать.
...
Рейтинг: 0 / 0
19.10.2016, 10:07:33
    #39329580
dbwr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сгруппировать часть выборки
illion,
в моем запросе второй case в group by не нужен,
убрать забыл.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сгруппировать часть выборки / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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