1

我有一张桌子,想按以下规则排序。
我将 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 |
| 美国广播公司 | 0 |
| 一个 | 0 |

结果:
| str |排名|
| abcd | 5 |
| ab | 2 |
| 一个 | 0 |
| 美国广播公司 | 0 |

4

2 回答 2

3

很简单。只需尝试以下操作:

SELECT * FROM table 
ORDER BY rank DESC, LENGTH(str) ASC;
于 2013-06-03T03:04:15.460 回答
0

由于在 DESC 排序时 0 的排名将始终排在列表的最后,因此您可以使用简单的 order by that sawrar026 显示:

SELECT * FROM table 
ORDER BY rank DESC, LENGTH(str)

如果您有不同的条件,或者如果 rank 可能是负数并且您只想在它为零的地方排序,您需要两个 case 语句,这样您就可以控制顺序,更改 case 语句中的条件以适应:

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
于 2013-06-03T04:14:32.583 回答