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

推薦する

CSS3のボックスサイズプロパティの興味深いボックスモデルについての簡単な説明

誰もがボックス モデルの構成を、内側から外側まで、コンテンツ、パディング、境界線、マージンについて知...

企業サイトとコラム辞典 中国語と英語の比較 中国語と英語のバイリンガル企業サイトを作る仲間は

名前キャラクター名前キャラクター情報ニューステクノロジー技術スキンケアスキンケア補う補う香水香水化粧...

面白いウェブサイトをデザインするための方法とテクニック(写真)

他の人から「つまらない」とか「時代遅れ」というフィードバックを受けて、それを変更しようとしたのに、更...

Linux CRM デプロイメント コードの詳細な説明

Linuxの基本設定 Linux環境でpython3をコンパイルしてインストールする 1. Linu...

JS 内の Json 文字列 + Cookie + ローカルストレージ

目次1.Json文字列1.1Json構文1.2 例2. クッキー2.1 使い方は? 3. ローカルス...

MySql COALESCE 関数の使用コード例

COALESCE は、各パラメータ式 (expression_1、expression_2、...、...

MySQL 5.7.33 インストール プロセスの詳細な図解

目次インストールパッケージのダウンロードインストール環境変数の設定インストールが成功したか確認する記...

Win7x64でのMySQL 5.7.18解凍版のインストール方法

関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...

Linux CentOS 7.4 で mysql5.7.20 のパスワードを変更する方法

MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...

Vue.jsはアイコンをクリックしてズームインし、

前回の記事では、Vue で画像の切り抜きや拡大・縮小、回転を実現する方法を紹介しました。今回は、アイ...

MySQL ビューの原則分析

目次更新可能なビュービューのパフォーマンスビューの制限ビューは MySQL 5.0 以降で導入されま...

Reactの親コンポーネントと子コンポーネント間のデータ転送の詳細な説明

目次1. 親コンポーネントが子コンポーネントにデータを渡す1.1. 親コンポーネントコード1.2. ...

Linux システムで Tomcat のポート 80 を使用する方法

アプリケーションシナリオ多くの場合、Linux サーバーに tomcat や nginx などのソフ...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...