oracle 如何按层PL SQL排序?

mpbci0fu  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(109)

我有下表:
| 评分| Score |
| --| ------------ |
| 一百一十一| 111 |
| 一百一十五| 115 |
| 一百二十| 120 |
| 一百二十五| 125 |
| 一百三十五| 135 |
我需要在新列中对它们进行排序,如范围:

  • 低于113
  • 从113到120
  • 从121到130
  • 从131

输出结果应该如下所示
| 评分|层级| Tier |
| --|--| ------------ |
| 一百一十一|一个| 1 |
| 一百一十五|二个| 2 |
| 一百二十|二个| 2 |
| 一百二十五|三个| 3 |
| 一百三十五|四个| 4 |

eaf3rand

eaf3rand1#

您可以使用CASE表达式将分数应用于特定范围。如果你真的想这样做,你可以通过这些范围(或基于这些范围的优先级)ORDER

SELECT t.*,
       CASE
       WHEN score <  113 THEN 1
       WHEN score <  121 THEN 2
       WHEN score <  131 THEN 3
       WHEN score >= 131 THEN 4
       END AS tier
FROM   table_name t
ORDER BY tier;

字符串
其中,对于样本数据:

CREATE TABLE table_name (Name, Score) AS
SELECT 'John',   111 FROM DUAL UNION ALL
SELECT 'Jack',   115 FROM DUAL UNION ALL
SELECT 'Joe',    120 FROM DUAL UNION ALL
SELECT 'Jimmuy', 125 FROM DUAL UNION ALL
SELECT 'Jill',   135 FROM DUAL;


输出:
| 评分|层级| TIER |
| --|--| ------------ |
| 一百一十一|一个| 1 |
| 一百一十五|二个| 2 |
| 一百二十|二个| 2 |
| 一百二十五|三个| 3 |
| 一百三十五|四个| 4 |
但是,您可以只使用ORDER BY score而不是ORDER BY tier
fiddle

相关问题