MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が分かりました。

では早速、コードをお見せしましょう。

ステップ 1: テーブルを作成する:

成績表を作成する(
`名前` varchar(10),
`subject` varchar(10)、
`スコア` int(10)
)

ステップ2: データの書き込み

成績に挿入(名前、科目、スコア)
値('シャオミン', '中国語', 85),
(「小花」、「中国人」、89)、
(「シャオ・リー」、「中国人」、91)、
(「小芳」、「中国人」、93)、
(『暁明』『数学』77)
(『小花』『数学』95)
(『小李』『数学』、83)、
(『小芳』『数学』、88)、
(「暁明」、「英語」、90)、
(「小花」、「英語」、92)、
(「シャオ・リー」、「英語」、85)、
(「小芳」、「英語」、88)

データは次のとおりです。

ステップ3:
要件: 各科目で2番目の生徒を見つける

まず、並べ替えます。

名前、科目、スコアを選択 
成績から
科目、スコア降順で並び替え

データは次のとおりです。

次に、各科目をグループごとに分類します

(@i:=case @subject_pre=t1.subject then @i+1 else 1 end) を rn として選択します。
t1.*,
(@subject_pre:=件名) 
から (
    名前、科目、スコアを選択 
    成績から
    科目、スコア降順で並び替え
) t1, 
(@i:=0、@subject_pre:='' を選択) を t2 として
科目、スコア別にグループ化
科目、スコア降順で並び替え

説明すると:
前の件名を記録するために比較項目 subject_pre を追加します。
自己増加シーケンスを追加して、index+1 関数を実装します。
データは既に整列しているため、指し示された主題が前に格納された主題と同じ場合は、シーケンス番号が 1 増加され、そうでない場合は、シーケンス番号が 1 から再計算されます。
これにより、グループソートが実現されます。

最後にrn=2のデータを取り出す

名前、科目、スコアを選択してください(
(@i:=case @subject_pre=t1.subject then @i+1 else 1 end) を rn として選択します。
t1.名前、
t1.主題、
t1.スコア、
(@subject_pre:=件名) 
から (
名前、科目、スコアを選択 
成績から
科目、スコア降順で並び替え
) t1, 
(@i:=0、@subject_pre:='' を選択) を t2 として
科目、スコア別にグループ化
科目、スコア降順で並び替え
)
ここでrn=2

最終結果は次のとおりです。

このように、row_number() 関数は mysql を使用して実装されます。

インターネットで見つけた情報の多くは明確に書かれていないので、ここでは例を使ってこの実装をわかりやすく説明します。お役に立てれば幸いです。

MySQL でカスタムシーケンスを使用して row_number 関数を実装する方法についての記事はこれで終わりです。MySQL row_number 関数の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MYSQL row_number() および over() 関数の詳細な使用方法
  • MySQLにおけるrow_numberの実装プロセス
  • Mysql 行番号() ソート関数の使い方と注意点

<<:  Vueのレスポンシブシステムの原理の詳細な説明

>>:  HTML ページはダーク モードの実装をサポートします

推薦する

VUEユニアプリ開発環境についての簡単な説明

目次1. HBuilderXビジュアルインターフェースを通じて2. vue-cliコマンドで実行する...

Win32 MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます

目次1. 問題の説明: 2. Jenkins設定のトラブルシューティング3. コードログのエンコード...

Zabbixで電子メールアラートを実装する方法

オンラインチュートリアルに従って実装しました。 zabbix3.4、スクリプトとsendEmailを...

MySQL InnoDB ReplicaSet の簡単な紹介

目次01 InnoDBレプリカセットの紹介02 InnoDBレプリカセットの制限03 導入前に知って...

Vueはダイアログのカプセル化を実装します

目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...

JavaScript Canvas は動的なワイヤーフレーム効果を描画します

この記事では、JavaScript Canvasの動的なワイヤーフレーム効果を描画する具体的なコード...

Vue+webrtc (Tencent Cloud) ライブブロードキャスト機能の実装実践

目次1. 生放送効果2. ライブストリーミングを開始する手順2.1 Tencent Web(高速ライ...

Windows での MySQL インストール チュートリアル (画像とテキスト付き)

MySQL インストール手順 MySQL は、スウェーデンの MySQL AB によって開発された...

JavaScript配列についてさらに詳しく知るのに役立つ記事

目次1. 配列の役割: 2. 配列の定義: 1. コンストラクタを通じて配列を作成する2. リテラル...

nginxでgzip圧縮を有効にする手順を完了する

目次序文1. gzip圧縮を設定する2. 詳細設定3. nginxサービスを再起動する要約する序文ウ...

MySQL ルートパスワードエラー番号 1045 の解決方法

MySQLサービスを停止するWindowsでは、マイコンピュータを右クリック--管理--サービスと...

clipboard.js の使用法の概要

目次(1)はじめに: (2)クリップボードの内容をコピーする方法は次のとおりです。 (3)関数演算に...

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...