MySQL Order By 複数フィールドのソートルールのコード例

MySQL Order By 複数フィールドのソートルールのコード例

事前に言っておく

気まぐれですが、MySQL の order by sorting にどのようなルールが使用されているのか知りたいです。 さて、これ以上前置きせずに、早速本題に入りましょう。

MySql 単一フィールドによる順序付け

次のようにテスト テーブルを作成します。

テーブル `a` を作成します ( 
 `code` varchar(255) デフォルト NULL, 
 `name` varchar(255) デフォルト NULL 
)ENGINE=InnoDB デフォルト文字セット=utf8; 
'中一', '我' に値を挿入します。 
values('中二', '你') に INSERT します。 
values('高一', '我是') に INSERT します。 
INSERT を values('高二', '我们') に挿入します。 
INSERT into a values('高二', '我的');
 

テストステートメントは次のとおりです。

-- hex(): 16進バイトコードを取得します。name、hex(name) を名前の降順で選択します。

結果は次のとおりです。

名前16進数(名前)
私のE68891E79A84
私はE68891E698AF
私たちE68891E4BBAC
E68891
あなたE4BDA0

当然ですが、MySQL でのソートはバイトコードに基づいています。最初の単語が同じ場合は、2 番目の単語のバイトコードが比較され、以下同様に続きます。

複数のフィールドによるMySqlの順序付け

比較することによってのみ、アイデアが生まれ、前進することができます。したがって、まず 1 つのフィールドの降順ソート結果を一覧表示し、次に 2 つのフィールドの降順ソート結果を見て、理由を分析します。

-- 名前の降順で並べ替えます。select * from a order by name desc; 
-- コードで降順で並べ替える select * from a order by code desc;

左側は名前の降順で並べ替えた結果で、右側はコード降順で並べ替えた結果です。

コード名前
高校2年生私の
グレード1私は
高校2年生私たち
中等1
中等2あなた
コード名前
高校2年生私たち
高校2年生私の
グレード1私は
中等2あなた
中等1

結果は明らかです。単一のフィールドをソートすると、他のフィールドの表示順序も自然にソートされます。

複数のフィールドの並べ替えを見てみましょう。

-- コード、名前の降順で並べ替えます。select * from a order by code, name desc;

コード名前
中等1
中等2あなた
グレード1私は
高校2年生私の
高校2年生私たち

結果は次のとおりです。まず、qq_27837327 と MjayTang に感謝します。ここでテストしました。この SQL ソートが無効であるという元のテキストは間違っています。実際、order by code, name desc は order by code asc, name desc と同じです。

テストの結果、コードと名前の desc による select * from a order のソート効果がまだ無効であることが判明しました。

次の文を見てみましょう

-- コードと名前の降順で並べ替えます。select * from a order by code desc, name desc; 
-- この文の効果は次の文と同等です。1と2はそれぞれコードと名前に対応します。 
1 desc、2 desc の順序でコード、名前を選択します。 

コード名前
高校2年生私の
高校2年生私たち
グレード1私は
中等2あなた
中等1

コードと名前の単一フィールドの降順ソートを比較すると、order by code desc、name desc を使用すると、MySQL は最初にコードの降順ソートを行い、次に降順のコードに基づいて名前を使用して降順ソートを行うことがわかります。

さらに、contat 関数を使用して複数のフィールドを連結し、並べ替えることもできます。ただし、フィールドが null にならないようにしてください。 concat SQL ステートメントと結果を見てみましょう。

concat(code,name) desc で順序を指定して * を選択する 

コード名前
高校2年生私の
高校2年生私たち
グレード1私は
中等2あなた
中等1

明らかに、このテスト例では、order by concat(code, name) descはorder by code desc, name descと同等です。

要約する

以上がこの記事の全内容です。皆様のお役に立てれば幸いです。参照を歓迎します:いくつかの重要なMySQL変数、MySQLマスターライブラリbinlog(master-log)とスレーブライブラリrelay-logの関係の詳細なコード説明、MySQL準備原則の詳細な説明など。質問がある場合は、いつでもメッセージを残してください。誰でもコミュニケーションと議論を歓迎します。

以下もご興味があるかもしれません:
  • MySQL Order by ステートメントの使用法と最適化の詳細な説明
  • MySQL の order by と group by シーケンスの問題の詳細な分析
  • MySQL で union と order by を同時に使用する方法
  • MySQL Order By 構文の紹介
  • MySQL の Order By インデックスの最適化方法
  • MySQL の order by パフォーマンス最適化方法の例
  • mysql order by in の文字順序の詳細な説明 (推奨)
  • MySQL ORDER BYの実装分析
  • MySQL Order By Rand() 効率分析
  • MySQLでorder byを使用せずにランキングを実装する3つの方法のまとめ

<<:  Videojs+swiper が Taobao の商品詳細カルーセルを実現

>>:  Linux で MySQL のデフォルト エンコーディングを変更する方法

推薦する

jQueryはフォーム検証を実装する

jQueryを使用してフォーム検証を実装します。参考までに、具体的な内容は次のとおりです。登録.ht...

Vuexの特性と機能の詳細な説明

目次Vuex とは何ですか? Vuexの5つの特性vuex の State 機能とは何ですか? vu...

mysql-8.0.16 winx64 最新インストール チュートリアル (画像とテキスト付き)

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

MySQL データベースの show processlist コマンドの使用の分析

実際のプロジェクト開発では、多数のクエリや挿入、特にマルチスレッド挿入など、データベースに大きな負荷...

Vue3 を使用してアップロード コンポーネントを実装するためのサンプル コード

目次一般的なアップロードコンポーネントの開発以下の機能を実装する必要がありますカスタムテンプレートサ...

Vue のプロダクション環境と開発環境を切り替えてフィルターを使用する方法

目次1. 本番環境と開発環境を切り替える最初の方法: .envファイルを設定する2番目の方法2. フ...

Red Hat Enterprise Linux 8 をベースにした CentOS 8 が正式にリリースされました

CentOS プロジェクトは、Red Hat の再配布要件に完全に準拠した、Red Hat Ente...

JavaScript におけるシリアル操作と並列操作

目次1. はじめに2. es5メソッド3. 非同期関数のシリアル実行4. 非同期関数の並列実行5. ...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...

VMware esxi6.5 のインストールと使用の詳細な手順

目次導入建築ESXIの利点vSphere とは何ですか? 2. 仮想マシンの利点3. 仮想マシンを使...

JavaScript を使用した数独の完全な実装プロセス

目次序文数独の解き方最初のボックスに記入してください2番目のボックスに記入してください3番目のボック...

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

Redux Toolkit で Redux を簡素化する方法

目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...