sql >> Databasteknik >  >> RDS >> Oracle

Procent SQL Oracle

Jag skulle föreslå att du beräknar en löpande procentsats med en fönsterfunktion och sedan jämför resultatet med 80.

I detta lilla kodexempel har jag visat hur man gör det baserat på resultatet av din fråga placerad i ett CTE-block som heter your_data . Det visar bara idén.

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

Den returnerar faktiskt 3 rader och du säger att du förväntar dig att 4 rader ska visas. För att lägga till raden där löpprocenten först överskrider din gräns (80), kan du extrahera den aktuella kategoriprocenten från löpande värde, d.v.s. ersätta sum(percentage) over (order by category) med sum(percentage) over (order by category) - percentage .

HTH




  1. hur man beräknar summatid med datatyp char i oracle

  2. Är denna kod säker från SQL-injektion

  3. hur man ändrar storleken på en kolumn

  4. MySQL EXPLAIN 'typ' ändras från 'intervall' till 'ref' när datumet i where-satsen ändras?