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

推薦する

Win10 DVWA のダウンロード、インストール、構成のグラフィック チュートリアルの詳細な説明 (初心者向け学習侵入)

コンピュータ システムが再インストールされ、侵入テスト学習環境 DVWA を再インストールする必要が...

Vueはスライダードラッグ検証機能の全プロセスを実現します

レンダリング 骨組みを定義し、HTMLとCSSを記述するHTML部分 <テンプレート> ...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

Mysql でよく使用される時間、日付、変換関数の概要

この記事では、主に実際のアプリケーションでよく使用されるMySQLの時刻と日付、および変換関数につい...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

Docker 可視化グラフィックツール portainer の詳細な説明

目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...

純粋なCSSを使用してスクロールシャドウ効果を実現します

端的に言うと、スクロール可能な要素には非常によくある状況があります。通常、スクロールすると、要素が現...

Web ページでの Unicode 文字の使用の概要 (&#、\u など)

初期のコンピュータでは ASCII 文字しか使用できませんでしたが、コンピュータのアプリケーションの...

ページのレンダリング時間を短縮してページの実行速度を速めます

ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

VueはOSSを使用して画像や添付ファイルをアップロードします

OSS を使用して Vue プロジェクトに画像や添付ファイルをアップロードするここでは、写真のアップ...

実用的な MySQL + PostgreSQL バッチ挿入更新 insertOrUpdate

目次1. 百度百科事典1. MySQL 2. PostgreSQL 3. MySQL に対する Po...

WeChat公式アカウントでReactプロジェクトを実行する方法

目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...

MySQLデータベースをアンインストールするための完全な手順

MySQLデータベースを完全にアンインストールするプロセスは次のとおりです。 1. MySQLサービ...