MySQL のあまり知られていないソート方法

MySQL のあまり知られていないソート方法

序文

ORDER BY 字段名升序/降序、このソートステートメントは皆さんご存知だと思いますが、特殊なソートに遭遇した場合、フィールド名のみを使用してもニーズを満たすことはできません。私が遭遇したソート方法をいくつか紹介します。

1. 準備

より良いデモンストレーションと理解のために、まず学生テーブルを準備し、番号、名前、学年の 3 つのフィールドを追加し、図に示すようにいくつかのデータを挿入します。

2. 条件付きソート

要件1: スコアを高いものから低いものの順に並べる

路上で野菜を売っているおばさんでもノックできますし、 ORDER BY examScore DESCを使えば簡単に完了できます(下の左の図を参照)。

要件2: スコアの高いものから低いものの順に並べ、スコアのないものを先頭にします

顧客体験が最も重要です。スコアの 2 回目の入力を容易にするために、このようなリクエストを行うのは普通のことです。このソートを実現するには、上記のステートメントを実装することはできないため、条件付きソートが必要です。まず、スコアが空かどうかを判定し、最大値を割り当ててからソートします。たとえばORDER BY IF(examScore IS NULL,101,examScore) DESCも簡単に実装できます (下の右の図を参照)。

必要要件 1要件 2
声明試験スコアの降順で並べ替えORDER BY IF(examScore IS NULL,101,examScore) DESC
効果ここに画像の説明を挿入ここに画像の説明を挿入

3. カスタムソート

お客様は神様のような存在で、派手な要求をされることも珍しくありません。例えば、張三と李思を前に座らせ、他の生徒を成績順に上位から下位に並べるよう要求します。この場合、カスタムソートを使用する必要があります。MySQL に組み込まれている FIELD 関数 (対応する文字列のインデックスを返す) を使用すると、これを実現できます。

声明1:
ORDER BY FIELD(studentName,'张三','李四') ASC、examScore DESC;

上記のステートメントを実行した結果、張三と李四は最後になります (下の左の図を参照)。当然、張三と李四を先頭に配置して降順で並べ替える必要があります。

声明2:
ORDER BY FIELD(studentName,'李四','张三') DESC、examScore DESC;

結果はまさに彼が望んでいた通りでした (下の右の写真を参照)。

声明文1声明2
効果ここに画像の説明を挿入ここに画像の説明を挿入

その後、FIND_IN_SET 関数を使用してもこれを実現できることがわかり、100 万のデータ レコードでテストした結果、FIND_IN_SET の方がパフォーマンスが優れていることがわかりました。

ORDER BY FIND_IN_SET(studentName,'李四,张三') DESC, examScore DESC;

4. 漢字を頭文字で並べ替える

中国語の文字は一般的なORDER BY 字段ASCを使用して簡単に並べ替えることができるので、なぜあまり知られていないのかと不思議に思う友人もいるかもしれません。
実際、ユーザーが GBK 文字セットを使用してテーブル フィールドを作成する場合、 ORDER BY 字段ASC直接使用することで問題を解決できます。一部のユーザーは文字化けを防ぐために utf8 文字セットを使用しており、単純なソート ステートメントは無力です (下の左の図を参照)。したがって、ソート時にフィールドを GBK に変換しても問題ありません (下の右の図を参照)。

声明学生名 ASC で並べ替えORDER BY CONVERT(studentName USING GBK) ASC
効果ここに画像の説明を挿入ここに画像の説明を挿入

要約する

これで、MySQL のあまり知られていないソート方法についての記事は終了です。MySQL のソート方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL での utf8mb4 照合の例
  • MySQL 集計関数のソート
  • インデックススキャンを使用したMySQLソート
  • Mysql 中国語ソートルールの説明
  • MySQLのデフォルトのソートルールに基づく落とし穴
  • MySQL ソートの原則とケース分析
  • MySQLクエリのソートとページング関連
  • インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法
  • MySQL のソートとページング (order by と limit) と既存の落とし穴
  • MySQL ソート機能の詳細

<<:  HTML Web ページにおける URL の表現

>>:  DockerコンテナはホストのMySQL操作にアクセスする

推薦する

モバイルプラットフォーム開発におけるメタタグの適用の詳細な説明

デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...

Vue で Openlayer を使用して読み込みアニメーション効果を実現する

注意: スコープアニメーションは使用できません。 ! ! ! GIF経由 <テンプレート>...

Tomcatのデフォルトパスの設定によって発生するプロジェクトURLの競合を解決する方法の詳細な説明

序文Tomcat は優れた Java コンテナですが、避けられない小さな落とし穴もいくつかあります。...

Jenkins の docker-compose デプロイメントと構成に関する詳細なチュートリアル

Docker-compose デプロイメント構成 Jenkins 1. Docker-compose...

SQL実装 LeetCode (176. 2番目に高い給与)

[LeetCode] 176. 2番目に高い給与従業員テーブルから 2 番目に高い給与を取得する ...

大きな太陽の天気アイコンを純粋な CSS で記述する方法の例

効果効果図は以下のとおりです実装のアイデアDivは太陽の長方形の光と影を実現します前の疑似要素は、既...

mysql data_dirの変更によって発生するエラー問題を解決する

今日は、新しく購入した Alibaba Cloud ECS 環境 (Ubuntu 16.04 LTS...

Docker クリーンアップ環境操作

丁寧に掃除を始めましょう!未使用ボリュームの一覧docker ボリューム ls -qf dangli...

IIS7 IIS8 リバースプロキシルールの記述、インストール、構成方法

目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...

MySQL 5.7.21 のインストールとパスワード設定のチュートリアル

MySQL5.7.21のインストールとパスワード設定のチュートリアルは次のとおりです。公式リファレン...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

etcd クラスターをデプロイするための docker-compose の実装手順

目次docker-compose.ymlを書くdocker-composeを実行するビルドステータス...

Visual Studio Codeを使用してMySqlデータベースに接続し、クエリを実行します。

Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...

Vueはデジタル千単位区切り形式をグローバルに実装します

この記事の例では、Vue がデジタル 3 桁区切り形式をグローバルに実装するための具体的なコードを参...

Vue-cli を使用して Vue プロジェクトを構築する手順の詳細な説明

まず、Vue-cli をインストールする必要があります。 npm インストール -g vue-cli...