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 をサポートするように設定するためのサンプル コード

推薦する

Windows での mysql-5.7.28 のダウンロード、インストール、および構成に関する詳細なグラフィックとテキストのチュートリアル

最近MySQLデータベースのバージョンを変更する必要があり、それを記録するために記事を書きます1. ...

MySQLへの外部ネットワークアクセスを許可し、MySQLアカウントのパスワードを変更する方法

mysqlのrootアカウント、普段はlocalhostか127.0.0.1で接続しています。会社の...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

HTMLテキストの一般的なイベントとメソッドの詳細な説明

イベントの説明onactivate: オブジェクトがアクティブ要素として設定されたときに発生します。...

Nginx ベースのアクセス制御と接続制限の実装

序文Nginxの組み込みモジュールは、同時リクエスト数の制限とリクエストのソースの制限をサポートして...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

Windows 10 で MySql の解凍バージョンをインストールして構成する方法のチュートリアル

Windows 10 で MySql データベースの解凍バージョンをインストールするステップ 1: ...

Vue でログインと登録テンプレートを実装するためのサンプルコード

テンプレート 1: ログイン.vue <テンプレート> <p class=&quo...

Vueはechart円グラフの凡例のパーセンテージを表示するメソッドを実装します

この記事では主に、echart を使用してパーセンテージを表示する Vue の円グラフデータ部分を紹...

CSS3 カテゴリメニュー効果

CSS3 カテゴリ メニューの効果は次のとおりです。 html <html> <ヘ...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

レスポンシブデザインについて知っておくべきこと

レスポンシブデザインとは、ウェブサイトの開発プロセス中に、ユーザーの操作やデバイス環境に応じて対応す...

データページング効果を実現する js オブジェクト

この記事の例では、データのページング効果を実現するためのjsオブジェクトの具体的なコードを参考までに...

Vueバックグラウンド管理に多言語機能を追加する例

目次1.まず、main.jsページを設定します2. 対応するパスの下で言語パックを構成します。ここに...