打个比方,表结构如下:
user  value
-----------
A      10
B      2
...
假设一共有200行数据。
现在可以按照value字段排序。我现在需要求这200行数据按value值排序后在所有数据中的百分比位置。例如如果value值最大的数据应该为99%,表示其所处的位置在99%之上。
不知道表达清楚没有。
应该怎么求啊?

解决方案 »

  1.   


    select value , cast(count(*) / (select count(*) cnt from tb) as decimal(18,2)) as rate from tb group by value order by rate desc
      

  2.   

    select * from ta as a
    order by value*1.0/(select sum(value) from ta where user=a.user)desc
      

  3.   

    可能我没有说清楚。我并不是求value值的个数在总的value值个数的比例。
    而是该value值在总的value值中所处的位置。
    比如5行的数据:
    A   Value
    ---------
    1    100
    2    50
    3    30
    4    20
    5    8那么得到的结果value值为100的最高,所处的位置在80%以上,value值为50的所处位置在60%以上。
      

  4.   

    以上为排序:
    以下为显示99%
    select *,
    百分比=
    rtrim(cast(
    (value*1.0/(select sum(value) from ta where user=a.user))*100 as decimal(15,2)))+'%'
    select * from ta as a
    order by 百分比 desc
      

  5.   

    declare @ta table (A int,  Value int)
    insert @ta select 1,    100
    insert @ta select 2,    50
    insert @ta select 3,    30
    insert @ta select 4,    20
    insert @ta select 5,    8select *,
    [百分比]=rtrim(
    cast(Value*1.0/(select sum(Value)from @ta)*100 as decimal(15,2))
    )+'%'
    from @ta a
    order by [百分比] desc(1 行受影响)
    A           Value       百分比
    ----------- ----------- ------------------------------------------
    4           20          9.62%
    1           100         48.08%
    5           8           3.85%
    2           50          24.04%
    3           30          14.42%(5 行受影响)
      

  6.   

    declare @ta table (A int,  Value int)
    insert @ta select 1,    100
    insert @ta select 2,    50
    insert @ta select 3,    30
    insert @ta select 4,    20
    insert @ta select 5,    8select *,
    [百分比]=rtrim(
    cast(Value*1.0/(select sum(Value)from @ta)*100 as decimal(15,2))
    )+'%'
    from @ta a
    order by (
    cast(Value*1.0/(select sum(Value)from @ta)*100 as decimal(15,2))
    ) descA           Value       百分比
    ----------- ----------- ------------------------------------------
    1           100         48.08%
    2           50          24.04%
    3           30          14.42%
    4           20          9.62%
    5           8           3.85%(5 行受影响)
      

  7.   

    如果我没理解错的话,应该就是求count
    对Value 排倒序,以value=50为例,百分数为  1-[(count(value>=50) )/count(all)]
    上面只是逻辑表达式,不知道LZ是不是这个意思
      

  8.   

    不好意思,我可能还没有表达清楚。
    是这样的。以上面5行的数据为例。
    现在一共有5行数据,value为100的在这5行数据中最大,所以排在最前面,应该为100%;
    value为50的比其他3行要大,只比100的小,所以位置应该为80%,依次类推。
    value为30的位置为60%,value为20的位置为40%,
    value为8的比所有的都小,所以位置为20%。
    因为只有5行数据,所以最小的位置也是20%。如果数据很多的话,可能最小的就最接近0%.