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 ページはダーク モードの実装をサポートします

推薦する

Javascript 非同期プログラミング: Promise を本当に理解していますか?

目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...

Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

1. シナリオ表示Tomcat ログに次の例外情報が時々報告されます。何が起こっているのでしょうか...

JSコンストラクタとインスタンス化およびプロトタイプ導入の関係

目次1. コンストラクタとインスタンス化2. コンストラクターとインスタンス化の関係は何ですか? 3...

Linuxの相対パスと絶対パスの使用

01. 概要絶対パスと相対パスはシェル環境でよく使用され、それぞれに独自の用途があります。相対パスの...

React.js フレームワーク Redux 基本ケースの詳細な説明

react.js フレームワーク Redux https://github.com/reactjs/...

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

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

HTML にネストされた div の無効なマージンに対する解決策

div がネストされているときに margin が機能しない問題の解決策を次に示します。さて、マージ...

MySQL データベースで UTF-8 エンコードを設定する方法

/etc/my.cnf または /etc/mysql/my.cnf ファイルを変更する [クライアン...

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 W...

Xshell にショートカット コマンドを追加する方法

便利なターミナル エミュレーターである Xshell は、開発者がホスト サーバーをリモート管理する...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

vue.config.js パッケージ最適化構成

Baiduの情報は多様すぎて目が回ります。心配しないでください。私はあなたのためにそれを体験しました...

Vueナンバープレート入力コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

アバターと国旗の統合を実現する1行のCSSコード

今日は建国記念日で、誰もが祖国の誕生日をお祝いしようとしています。毎年この時期になると、WeChat...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...