リーグと呼ばれる列を持つ MYSQL のテーブルがあります。
このクエリを使用して値を並べ替えようとすると、正しく並べ替えることができません。
SELECT DISTINCT (
t.league
)
FROM teams t
GROUP BY t.league
ORDER BY t.league ASC
しかし、これで私は得る:
11a12
13
14
15
16a17
5a7
8a10
最後の2つを除いて、すべて正しくソートされているようです
何か案は?
ありがとう
リーグと呼ばれる列を持つ MYSQL のテーブルがあります。
このクエリを使用して値を並べ替えようとすると、正しく並べ替えることができません。
SELECT DISTINCT (
t.league
)
FROM teams t
GROUP BY t.league
ORDER BY t.league ASC
しかし、これで私は得る:
11a12
13
14
15
16a17
5a7
8a10
最後の2つを除いて、すべて正しくソートされているようです
何か案は?
ありがとう
いいえ、数値ではなく辞書順でソートされています。
11a12
13
14
15
16a17
5a7 # 5 is greater than 1
8a10
それらを数値で並べ替えたい場合は、次のようなものを使用できます。
order by (t.league + 0)
order by cast (t.league, int)
しかし、フィールド内の数値以外をどのように処理するかはわかりません。関数のlpad使用を検討することをお勧めします。
order by lpad (t.league, 20, '0')
これは、フィールドの前に文字を付けて、フィールドを特定のサイズにパディングします0。
行ごとの関数が適切にスケーリングされることはめったにないことに注意してください。テーブルのサイズが大きくなってもパフォーマンスを維持したい場合は、列をコンポーネントに分割して、数値のものを非テキストにするなどの操作を行うことができます。特定の状況に応じて、それが機能する場合と機能しない場合があります。
はい、列は文字列型である必要があり、5AFTER が来11ます。これらのフィールド (複数評価されているように見える) を 2 つの別個の数値フィールド (またはそのa値が違いを生む場合は 3 つ) に変更することを検討してください。