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操作にアクセスする

推薦する

GoogleとFacebookがDockerを使わない理由

この記事を書いた理由は、修正した分散 PyTorch プログラムを Facebook のクラスター上...

ウェブサイトデザインにおいて非常に重要な概念であるdiv+floatの分析

ウェブサイトの構築では、HTML と CSS に関するさまざまな問題に常に遭遇します。ウェブサイト ...

Linux echo テキスト処理コマンドの使用法と例

Linux ヘルプ ドキュメントでの echo の説明は、Python や Java などのプログラ...

ROS2のインストールとdocker環境の使い方について

目次Docker を使用する理由は何ですか? DockerのインストールROSイメージを取得するRO...

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...

MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する

目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...

JavaScriptはフォームデータの非同期送信を実装します

この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...

HTML 文法百科事典_HTML 言語文法百科事典 (必読)

ボリュームラベル、プロパティ名、説明002 <! - - ... - -> コメント00...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

MySQL 圧縮版 zip のインストールに関する問題の解決策

本日、MySQLの圧縮版をインストールする際に問題が発生しました。サービスが起動できず、2、3時間苦...

CSSを使用してダークモードとブライトモードを切り替える

Web Skills第5号では、CSSでダークモードやハイライトモードを実装するための技術的なソリュ...

VMware に Linux システム (Redhat8) と仮想マシンのネットワーク構成をインストールする方法

目次1. VMwareをインストールする1.1 VMwareworkstationsをダウンロードし...

MySQL グリーンバージョン設定コードと 1067 エラーの詳細

MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 &#...

Windowsにmysql5.7をインストールする方法

まずmysqlの圧縮バージョンをダウンロードします。公式ダウンロードアドレスは123WORDPRES...

MySQL 文字セットの概要

目次文字セット比較ルール4つのレベルの文字セットと比較規則3つのシステム変数このノートは主にMySQ...