1

テーブルがあり、次のルールで並べ替えたいと思います。
私は次のように SQL を実行します
(1) select * from table orderby rank;
(2) select * from table orderby LENGTH(str);
が、(ランク>0 の場合) ステートメントに基づいてこれら 2 つの 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 |ランク|
| | アブ | 2 |
| | abcd | 5 |
| | abc | 0 |
| | | | 0 |

結果:
| str |ランク|
| | abcd | 5 |
| | アブ | 2 |
| | | | 0 |
| | abc | 0 |

4

2 に答える 2

0

ランク 0 は、DESC で並べ替えると常にリストの最後になるため、sawrar026 が示す単純な順序を使用できます。

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

別の条件がある場合、またはランクが負になる可能性があり、0 の場所だけを並べ替えたい場合は、2 つの 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 に答える