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

推薦する

UDP DUP タイムアウト UPD ポート状態検出コード例

以前、単純な UDP サーバーとクライアントの例を書きましたが、その中で、自分自身をクライアントと見...

Linux でソースインストールされたパッケージを簡単に削除する方法

ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...

html ページ!--[IE の場合]...![endif]--使用方法の詳細な紹介

コードをコピーコードは次のとおりです。 <!--[IEの場合]><script t...

Linux でプロセスを効果的に管理するための 8 つのコマンド

序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...

MySQL のスケジュールされた完全なデータベースバックアップ

目次1. MySQLデータのバックアップ1.1、データをバックアップするためのmysqldumpコマ...

ミニマルなウェブサイトデザインの例

Web アプリケーション クラス1. みんなのためにダウンまたは私だけのためにこのウェブサイトは、ウ...

Linux での Docker と portainer の設定方法

1.Docer CEをインストールして使用するこの記事では、CentOS 7 を例に Docker ...

docker-maven-pluginを使用してデプロイメントを自動化する方法を説明します

1. docker-maven-pluginの紹介私たちの継続的インテグレーションプロセスでは、プロ...

幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...

CSS クリアフロートクリア:both サンプルコード

今日はフロートのクリアについてお話します。フロートのクリアについてお話する前に、フロートとは何かを理...

MySQL の結合インデックスと左端一致原則の詳細な説明

序文これまでインターネットでMySQLジョイントインデックスの最左接頭辞マッチングに関する記事をたく...

MySQL 最適化技術における Limit クエリの最適化分析

序文実際のビジネスでは、ページングは​​一般的なビジネス要件です。次に、制限クエリを使用します。制限...

offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft などのプロパティの図。

注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...

VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

背景VirtualBox 仮想マシン (Ubuntu 16.04 システムがロードされている) には...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...