我有一张桌子,想按照规则排序
我把SQL作为:
(1) select * from table orderby rank;
(2) select * from table orderby LENGTH(str);
但是如何基于(如果rank> 0)语句将这两个SQL组合起来?
这个想法就像是
subTable_1 which rank>0, than sort by rank;
subTable_2 which rank==0, than sort by str.length;
result = subTable_1 + subTable_2;
非常感谢
表:
| STR |排名|
| AB | 2 |
| ABCD | 5 |
| ABC | 0 |
| A | 0 |
结果:
| STR |排名|
| ABCD | 5 |
| AB | 2 |
| A | 0 |
| ABC | 0 |
答案 0 :(得分:3)
非常简单。试试以下内容:
SELECT * FROM table
ORDER BY rank DESC, LENGTH(str) ASC;
答案 1 :(得分:0)
由于排序为DESC时,等级0始终位于列表的最后,因此您可以使用sarar026显示的简单顺序:
SELECT * FROM table
ORDER BY rank DESC, LENGTH(str)
如果您有不同的条件,或者排名可能是负数而您只想排序为零,那么您需要两个案例陈述,因此您可以控制顺序,将案例陈述中的条件更改为西服:
SELECT *
FROM Table1
ORDER BY CASE WHEN rank>0 THEN rank ELSE 0 END DESC
,CASE WHEN rank=0 THEN LENGTH(str) ELSE 0 END