sql >> Database >  >> RDS >> Oracle

Percentage SQL Oracle

Ik stel voor om een ​​lopend percentage te berekenen met behulp van een vensterfunctie en het resultaat vervolgens te vergelijken met 80.

In dit kleine codevoorbeeld heb ik laten zien hoe u dit moet doen op basis van het resultaat van uw zoekopdracht die is geplaatst in een CTE-blok met de naam your_data . Het laat je alleen het idee zien.

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

Eigenlijk retourneert het 3 rijen en je zegt dat je verwacht dat er 4 rijen worden getoond. Om de rij toe te voegen waar het hardlooppercentage als eerste uw grens (80) overschrijdt, kunt u het huidige categoriepercentage extraheren uit de lopende waarde, d.w.z. sum(percentage) over (order by category) met sum(percentage) over (order by category) - percentage .

HTH




  1. SQL-vindende persoonsinvoer heeft de meeste honden

  2. Hoe schrijf ik een join met deze ongebruikelijke matching criteria?

  3. ITL-impasse van Oracle identificeren en oplossen

  4. GROUP BY-gedrag wanneer er geen aggregatiefuncties aanwezig zijn in de SELECT-component