MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

1. テストデータベーステーブルは次のとおりです。

テーブルテストの作成 
( 
  `id` int NULLではない自動増分、 
  `name` varchar(20) NULLでないデフォルト '' 
  `score` int NULLでないデフォルト0、 
  主キー (`id`) 
)エンジン=InnoDB CHARSET=UTF8; 

2. 次のデータを挿入します。

mysql> テストから * を選択します。 
+----+----------+-------+ 
| ID | 名前 | スコア | 
+----+----------+-------+ 
| 1 | ジェイソン | 1 | 
| 2 | ジェイソン | 2 | 
| 3 | ジェイソン | 3 | 
| 4 | リンジエ | 1 | 
| 5 | リンジエ | 2 | 
| 6 | リンジエ | 3 | 
| 7 | 暁頂 | 1 | 
| 8 | 暁頂 | 2 | 
| 9 | 暁頂 | 3 | 
| 10 | ハスト | 2 | 
| 11 | ハスト | 3 | 
| 12 | ハスト | 1 | 
| 13 | ははは | 1 | 
| 14 | ははは | 2 | 
| 15 | デンジ | 3 | 
| 16 | デンジ | 4 | 
| 17 | デンジ | 5 | 
| 18 | シャジ | 3 | 
| 19 | シャジ | 4 | 
| 20 | シャジ | 2 | 
+----+----------+-------+ 

3. 以下が重要なポイントです。目的は、名前でグループ化し、グループ化後に各グループの最高スコアを取得することです。SQLは次のとおりです。

a.* をテスト a から選択し、内部結合 (名前、最大 (スコア) スコアをテスト グループから名前で選択)b を a に対して選択します。
name=b.name かつ a.score=b.score は a.name で順序付けられます。 

もちろん、上記のa.nameによる最後の順序は削除できます。

4. テスト結果は次のとおりです。

+----+----------+-------+ 
| ID | 名前 | スコア | 
+----+----------+-------+ 
| 3 | ジェイソン | 3 | 
| 6 | リンジエ | 3 | 
| 9 | 暁頂 | 3 | 
| 11 | ハスト | 3 | 
| 14 | ははは | 2 | 
| 17 | デンジ | 5 | 
| 19 | シャジ | 4 | 
+----+----------+-------+ 

5. インターネット上の多くの方法は間違っており、例えば以下のようなもので、個人的にテストしてもうまくいきません。

select * from (select * from test order by score desc) t group by name order by score desc limit 4; 
名前でテストグループからスコア、最大(スコア)を選択します。 
select * from test where score in (select max(score) from test group by name); 
select * from test where score in (select substring_index(group_concat(score order by score desc Separator ','),',',1) from test group by name); 
 
select * from (select name,score,ROW_NUMBER() over(group by name order by score desc) as rowNum from test) rank where rank.rowNum <=1 order by rank.score desc; 
 
select * from( select StoresNo,[CustomerCaseNo],[PaymentsTime], ROW_NUMBER() over(partition by CustomerCaseNo order by [PaymentsTime] desc) as rowNum 
BAL_paymentsSwiftInfo から、StoresNo='zq00000034' の場合) ランク付けされ、ranked.rowNum <= 1 で、ranked.CustomerCaseNo、ranked.PaymentsTime で順序付けされます。 
 
select * from (select * from test order by score desc) を a.name でグループ化して選択します。 

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以下もご興味があるかもしれません:
  • MySql のグループ化と各グループからランダムに 1 つのデータを取得する
  • 各グループの最新データを取得するためにMySQLベースのグループを実装する
  • MySQL サブクエリとグループ化されたクエリ
  • MySQL グループ化クエリと集計関数
  • MySql Group Byは複数のフィールドのグループ化を実装します
  • 上位Nを見つけるためのMySQLグループソートの詳細な説明
  • Mysqlはグループによるソートを使用する
  • MySQLデータのグループ化の詳細な説明

<<:  Docker ベースの Etcd 分散デプロイメントの方法と手順

>>:  nginx を https をサポートするように設定するためのサンプル コード

推薦する

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アン...

虫眼鏡効果を実現するJavaScript

この記事では、虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。...

Net Core実装プロセス分析のDoc​​kerインストールと展開

1. Dockerのインストールと設定 #CentOS をインストールし、Docker パッケージを...

MySQLデータベース操作の基本コマンド

1. データベースを作成します。 データ data _name を作成します。 PHP でデータベー...

Vue.js でフォントを読み込む正しい方法

目次font-faceでフォントを正しく宣言するフォントをプリロードするフォントをホストするにはli...

MySQL v5.7.18 解凍バージョンのインストール詳細チュートリアル

MySQLをダウンロード5.1.1.1 より前のバージョン私のコンピュータは64ビットなので、Win...

Docker を使用して開発環境を構築する方法 (Windows および Mac)

目次1. Dockerを使用する利点2. Dockerをインストールする1) LinuxにDocke...

MySQL がユーザー名とパスワードの漏洩を引き起こす可能性のある Riddle の脆弱性を公開

MySQL バージョン 5.5 および 5.6 を標的とする Riddle 脆弱性により、中間者攻撃...

vue+el-element でファイル名に応じてダイアログを動的に作成する実践

目次背景成し遂げる1. カプセル化された /utils/dialogControl.js 2.ダイア...

JSはclip-pathを使用して動的領域クリッピング機能を実装します

背景今日、CodePen を閲覧していたところ、非常に興味深い効果を見つけました。 CodePen ...

Docker環境にJenkinsコンテナをインストールする詳細なチュートリアル

推奨される Docker 学習教材: https://www.runoob.com/docker/d...

mysqlサーバーは--skip-grant-tablesオプションで実行されています

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステー...

VUE レンダリング機能の使い方と詳細な説明

目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...

MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明

目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...

Vue 大画面データ表示例

効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...