您的位置:首页 > 数据库 > MySQL

求排名 mysql构建rownum字段

2015-01-11 10:03 148 查看
create table t(s number);insert into t values(90);insert into t values(50);insert into t values(20);commit;问题:给出一个数,求出这个数在这个表中的排名假如:给出100,返回1给出90,返回1给出80,返回2给出40,返回3给出10,返回4
提示:下文中的40是给出的数1   oracle数据库下select nvl((    select rn    from    (        select fir.*,rownum as rn from        (select t.*,40 as value from t order by s desc) fir    ) sec    where value-s=    (        select min(value-s) as cut        from        (            select fir.*,rownum as rn from            (select t.*,40 as value from t order by s desc) fir        )sec         where value-s>=0    ) ),--参数一(select count(*)+1  from t)    --参数二)  as  rank from dual
2   mysql数据库下mysql中没有oracle的rownum,所以需要自己构建一个相似于oracle的rownum字段select ifnull((select rownumfrom( select *,40 value from (select  a.*,(select count(*)from t where t.s>=a.s) as rownum from t a) fir     --构建类似的rownum字段) secwhere value-s=( select min(value-s) as cut from ( select *,40 value from (select  a.*,(select count(*)from t where t.s>=a.s) as rownum from t a) fir   --构建类似的rownum字段 ) sec  where value-s>=0) ),(select count(*)+1 as s from t)) as rank
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: