当前位置: 代码迷 >> Oracle技术 >> 如果分数 > 70分,全部排名第一,其余的按降序排名,一条SQL怎么实现
  详细解决方案

如果分数 > 70分,全部排名第一,其余的按降序排名,一条SQL怎么实现

热度:41   发布时间:2016-04-24 08:28:53.0
如果分数 > 70分,全部排名第一,其余的按降序排名,一条SQL如何实现

吉他里的俊 15:45:35
name score
AA 67
BB 85
CC 98
DD 58
EE 72
FF 83
GG 47

如果score > 70 , 排名第一, 其余的按降序排名
结果:

name score rank
AA 67 5
BB 85 1
CC 98 1
DD 58 6
EE 72 1
FF 83 1
GG 47 7


------解决方案--------------------
这个 貌似要加一层子查询判断了
------解决方案--------------------
SQL code
create table t1 (name varchar2(10),score number(3));insert into t1 values ('AA',67);insert into t1 values ('BB',85);insert into t1 values ('CC',98);insert into t1 values ('DD',58);insert into t1 values ('EE',72);insert into t1 values ('FF',83);insert into t1 values ('GG',47);commit;select name,       score,       case when score >= 70 then 1 else rank() over(order by score desc) end rankfrom t1order by name    name    score    rank--------------------------------1    AA    67    52    BB    85    13    CC    98    14    DD    58    65    EE    72    16    FF    83    17    GG    47    7
------解决方案--------------------
菜鸟一只,完全不懂楼主意思!楼上或者楼主帮忙解答下,楼主这是在做的什么?要求呢?
------解决方案--------------------
老是搞这些小技巧。能帮我想想怎么玩转10亿条记录么
------解决方案--------------------
SQL code
SELECT t.*,       RANK() OVER(ORDER BY CASE WHEN t.score >= 70 AND t.score <= 85 THEN NULL ELSE t.score END DESC)  FROM tb t
------解决方案--------------------
好像没说清楚, < 70 的那些,怎么排?

是从 1 开始,从 2 开始,还是 从上面那些个数之后 开始?
------解决方案--------------------
用动态SQL不就得了,想怎么拼就怎么拼SQL
------解决方案--------------------
4楼正解了 还啥议论的 都看看把
  相关解决方案