Home > Blockchain >  Find the pecentage between numbers in Oracle SQL
Find the pecentage between numbers in Oracle SQL

Time:06-18

I have a data set similar to below and I'm trying to group the data into percentage ranges. It doesn't have to be a single query.

Number A Number B
105 100
115 134
120 110
140 170
140 190

I want to pull the rows where Number A is 0-6% - of Number B, so I would expect to only pull the first row in the example data set for this first bucket. I'm also trying to do the same thing but for 7-15%, 16-20% and so forth.

I've tried the following but my brain is fried so I don't feel confident that this is the right approach. Select * from table WHERE abs(NumberA/NumberB * 100) >= 0 and abs(NumberA/Number * 100) <= 6

CodePudding user response:

You can use CASE to compute the range for each pair. For example:

select t.*, 
  case when abs(b / a - 1.0) < 0.06 then '0-6%'
       when abs(b / a - 1.0) < 0.15 then '6-15%'
       when abs(b / a - 1.0) < 0.20 then '15-20%'
       else '20% ' end as segment       
from t

Result:

 A    B    SEGMENT 
 ---- ---- ------- 
 105  100  0-6%    
 115  134  15-20%  
 120  110  6-15%   
 140  170  20%     
 140  190  20% 

See running example at db<>fiddle.

If you want to get only rows in the 0-6% range you can do:

select * 
from t
where abs(b / a - 1.0) < 0.06

Grouping is trivial when you have the ranges.

  • Related