Oracle
 sql >> Database >  >> RDS >> Oracle

Percentuale SQL Oracle

Suggerirei di calcolare una percentuale corrente utilizzando una funzione finestra e quindi confrontare il risultato con 80.

In questo piccolo esempio di codice ho mostrato come farlo in base al risultato della tua query inserita in un blocco CTE chiamato your_data . Ti mostra solo l'idea.

with 
    your_data (category, percentage) as(
        -- sample data based on your example
        select 1, 32 from dual union
        select 2, 20 from dual union
        select 3, 20 from dual union
        select 4, 10 from dual union
        select 5, 18 from dual
    ),
    t as (
        select  your_data.*,
                -- running sum calculation
                sum(percentage) over (order by category) pctg_running
          from  your_data 
    )
select * 
  from t
 where pctg_running <= 80

In realtà restituisce 3 righe e dici che ti aspetti che vengano mostrate 4 righe. Per aggiungere la riga in cui la percentuale corrente supera per prima il tuo limite (80), puoi estrarre la percentuale della categoria corrente dal valore corrente, ovvero sostituire sum(percentage) over (order by category) con sum(percentage) over (order by category) - percentage .

HTH