Bom dia,
Eu preciso fazer um SQL, que limite os registros em 80% do seu total.
Por exemplo, tenho o total de 1000 reais, entre N produtos. Preciso mostrar somente os registros que somarem 800 reais, os demais não quero mostrar.
Alguém tem noção de como fazer isso? Eu tenho pegar a primeira linha, somar com a segunda e assim por diante, até que chegue no valor de 800.
Obrigado!
Somar Percentual Linha Anterior
- dr_gori
- Moderador
- Mensagens: 5013
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Pode usar funções analíticas pra isso. Veja esse exemplo:
Aqui está sua tabela:
Vamos ver quanto é a soma de cada grupo: (no caso, deptno).
Estamos considerando aqui que cada grupo pode ter a soma diferente.
Agora, vamos colocar a Soma total (TOTAL_GRUPO) E a soma de cada linha (RUNNING)
Agora, eu mudei o ORDER BY pra deixar os valores maiores primeiro.
Também coloquei o percentual, baseado no RUNNING / TOTAL_GRUPO.
Agora fica bem fácil você filtrar essa tabela, conforme o percentual que você precisa. 80%.

Aqui está sua tabela:
select deptno, sal from emp
order by 1;
DEPTNO SAL
------ ---------
10 2450.00
10 1300.00
10 5000.00
20 3000.00
20 3000.00
20 2975.00
20 800.00
20 1100.00
30 1250.00
30 1250.00
30 1500.00
30 950.00
30 1600.00
30 2850.00
14 rows selected
SQL>
Estamos considerando aqui que cada grupo pode ter a soma diferente.
SELECT DEPTNO, SUM(SAL)
fROM EMP
GROUP BY DEPTNO;
DEPTNO SUM(SAL)
------ ----------
30 9400
20 10875
10 8750
SQL>
select deptno
, sal
, sum(sal) over (partition by deptno order by deptno, sal) running
, sum(sal) over (partition by deptno) total_grupo
from emp
order by 1,2;
DEPTNO SAL RUNNING TOTAL_GRUPO
------ --------- ---------- -----------
10 1300.00 1300 8750
10 2450.00 3750 8750
10 5000.00 8750 8750
20 800.00 800 10875
20 1100.00 1900 10875
20 2975.00 4875 10875
20 3000.00 10875 10875
20 3000.00 10875 10875
30 950.00 950 9400
30 1250.00 3450 9400
30 1250.00 3450 9400
30 1500.00 4950 9400
30 1600.00 6550 9400
30 2850.00 9400 9400
14 rows selected
SQL>
Também coloquei o percentual, baseado no RUNNING / TOTAL_GRUPO.
select
deptno
, sal
, running / total_grupo * 100 perc
from
(
select deptno
, sal
, sum(sal) over (partition by deptno order by deptno, sal desc) running
, sum(sal) over (partition by deptno) total_grupo
from emp
order by 1,2 desc
)
order by 1,2 desc
DEPTNO SAL PERC
------ --------- ----------
10 5000.00 57.1428571
10 2450.00 85.1428571
10 1300.00 100
20 3000.00 55.1724137
20 3000.00 55.1724137
20 2975.00 82.5287356
20 1100.00 92.6436781
20 800.00 100
30 2850.00 30.3191489
30 1600.00 47.3404255
30 1500.00 63.2978723
30 1250.00 89.8936170
30 1250.00 89.8936170
30 950.00 100
14 rows selected
SQL>

- vitellozzi
- Rank: Programador Sênior
- Mensagens: 50
- Registrado em: Qua, 15 Set 2010 9:53 am
- Localização: Itatiba
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante