我没有像寻找什么那样寻找答案,因为我认为这是可能的。我有一个查询结果可以这样:
| ID | CODE | RANK |
我想基于代码排名,所以我得到了这些结果
| 1 | A | 1 |
| 1 | B | 1 |
| 2 | A | 1 |
| 2 | C | 1 |
| 3 | B | 2 |
| 3 | C | 2 |
| 4 | C | 3 |
基本上,根据ID组,如果任何CODEs =某个值我想调整等级,那么我可以先按等级排序,然后按其他列排序。永远不确定如何在SQL中表达内容。
我试过了
CASE WHEN CODE = 'A' THEN 1 WHEN CODE = 'B' THEN 2 ELSE 3 END rank
ORDER BY rank DESC
但是我想把这些ids保持在一起,我不想让它们分开,如果我不能以另一种方式解决它,我想在所有等级基础上做同样的事情?/ p>
关于SQL函数的思考?
答案 0 :(得分:1)
您可以使用MIN() OVER()
分析函数获取每组的最低排名值,并按此排序;
WITH cte AS (
SELECT id, code,
MIN(CASE WHEN code='A' THEN 1 WHEN code='B' THEN 2 ELSE 3 END)
OVER (PARTITION BY id) rank
FROM mytable
)
SELECT * FROM cte
ORDER BY rank, id, code