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

推薦する

HTML TextArea でのフォーマット保存の問題の解決方法

textarea の形式は保存時にデータベースに保存できますが、表示時には /n と相互に変換できな...

CSS3のwebkit-box-reflectを巧みに使用して、さまざまな動的効果を実現します。

かなり前の記事で、 -webkit-box-reflectプロパティについて説明しました。リフレクシ...

Tomcat が応答データグラムを書き戻すタイミングの詳細な分析

疑問が生じるこの質問は、ファイルのダウンロードを記述しているときに発生しました。HttpServle...

JavaScript操作要素は、ページコンテンツのスタイルを変更する方法を教えます

目次1. 操作要素1.1. 要素コンテンツの変更1.2. innerText と innerHtml...

マップタグパラメータの詳細な紹介と使用例

マップ タグはペアで表示する必要があります。 <map> ....</map>...

最初のReactページを作成する方法

目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...

Ubuntu Linux に Git と GitHub をインストールして使用する

Git 入門Git は、Linux(R) カーネル開発の管理を支援するために 2005 年に Lin...

nginxワーカープロセスループの実装

ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...

Mac に Windows サービスを備えた仮想マシンをインストールする方法

1. 仮想マシンをダウンロードする公式ダウンロードウェブサイト: https://www.vmwar...

EasyUEFI を使用して Windows 10 で USB ドライブなしで Ubuntu 18 をインストールする

1. BIOSを確認するまず、コンピュータの起動モードを確認します。win+R と入力し、msinf...

Linux の PHP に XML 拡張機能をインストールする詳細な手順

PHP Linux に XML 拡張機能をインストールする1. PHPインストールソースパッケージを...

JavaScript の基礎: エラーキャプチャメカニズム

目次序文エラーオブジェクト投げる試して…捕まえて…最後に最終ルールトライ/キャッチパフォーマンスウィ...

Alibaba Cloud Ubuntu 16.04でpptpdサービスを構築する方法

1. PPTP VPNを構築するには、ポート1723とGREプロトコルを開く必要があります。 1. ...

Ubuntu 18.04はルート権限を取得し、ルートユーザーとしてログインします

事前に書いておきます:次の手順では、ターミナルにコマンドを入力する必要があります。コンピューターでブ...

docker-composeの詳細なインストールと使用方法

Docker Compose は、複雑なアプリケーションを定義および実行するための Docker ツ...