I have table column filled with float values e.g.:
id-Values
1- 0.19230769230769232
2- 8.4848484848484854E
3- 0.10823529411764705
4- 0.05459770114942529
...
I would like to know: is there a SQL function that allows me to return a percentage of the selected row position compared to the others?
For example:
I want to know if there is an easy way to check if the row 4 is in the TOP 10%. Or if the row 2 is in the LAST 10% (order by values).
I know it’s not possible to do a SELECT TOP 10% or a SELECT LAST 10% with SQL Server but it’s just to give an example of what I want to do.
@Solution:
declare @a int
declare @b int
declare @values float
select @values = values from test where id <= 2
select @a = count(*) from test where values <= @values
select @b = count(*) from test
select cast( cast(@a as float) / cast(@b as float) as float) * 100 as percentage
Ok, this should be a SQL 2000 compatible version. Based on the same table structure as my prior answer:
Assuming an index on Id, there’s now only 1 table scan. In case of duplicate values, this will select the position based on the first occurance. Mess around with that +1; without it, the first value will get you 0%, with it, with four rows you’d get 25% — so what is right for your application? Also, if the table is empty, you’ll get a divide by zero error, so you’ll need to handle that as appropriate to your application.