Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Prozentsatz SQL Oracle

Ich würde vorschlagen, einen laufenden Prozentsatz mit einer Fensterfunktion zu berechnen und dann das Ergebnis mit 80 zu vergleichen.

In diesem kleinen Codebeispiel habe ich gezeigt, wie es geht, basierend auf dem Ergebnis Ihrer Abfrage, die in einen CTE-Block namens your_data platziert wurde . Es zeigt Ihnen nur die Idee.

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

Tatsächlich gibt es 3 Zeilen zurück und Sie sagen, Sie erwarten, dass 4 Zeilen angezeigt werden. Um die Zeile hinzuzufügen, in der der laufende Prozentsatz zuerst Ihre Grenze (80) überschreitet, können Sie den aktuellen Kategorieprozentsatz aus dem laufenden Wert extrahieren, d. h. sum(percentage) over (order by category) ersetzen mit sum(percentage) over (order by category) - percentage .

HTH