按两个规则对一个表进行排序

时间:2013-06-03 02:56:55

标签: mysql sql

我有一张桌子,想按照规则排序 我把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 |

2 个答案:

答案 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