powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сгруппировать часть выборки
6 сообщений из 6, страница 1 из 1
сгруппировать часть выборки
    #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
сгруппировать часть выборки
    #39329478
illionВозможно ли
Код: plsql
1.
2.
3.
4.
5.
6.
select 'emp	procent
Иванов	32
Петров	28
Сидоров	21
остальные	19
' from "Есть выборка вида";
...
Рейтинг: 0 / 0
сгруппировать часть выборки
    #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
сгруппировать часть выборки
    #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
сгруппировать часть выборки
    #39329510
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цель - выбрать первых N наиболее отличившихся товарищей.

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


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