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

推薦する

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

MySQL の時間保持問題に関する簡単な分析

MySQL のデフォルトの時間タイプ (datetime と timestamp) の精度は秒です。...

Reactフックの長所と短所

目次序文アドバンテージ:欠点: 1. レスポンシブな使用効果2. ステータスが同期されていないRea...

検索ボックスと検索ボタンの境界線が重なり合わない問題を解決

今日、Baiduのページで練習していたところ、検索ボックスとボタンの余白とパディングの値が0に設定さ...

きちんとした標準的なHTMLタグの書き方を学ぶ

優れた HTML コードは美しい Web サイトの基礎となります。私が CSS を教えるときは、まず...

ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

目次1. Cocos Creatorでのオーディオ再生の基本1. 基本2. 一般的な方法2. Coc...

MySQLトリガーの詳細な説明と簡単な例

MySQLトリガーの簡単な例文法CREATE TRIGGER <トリガー名> -- トリ...

WindowsでiTunesのバックアップパスを変更する方法

0. 準備: • iTunesを閉じる• タスクマネージャーでiTunesから始まるサービスを終了し...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

IE における条件付きコメントの利点と欠点

IE の条件付きコメントは、通常の (X)HTML コメントに対する Microsoft 独自の (...

HTMLのリストタグを数える

1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...

Docker 実行時にユーザーとグループを管理する方法

Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...

MySQL マルチテーブルクエリの詳細な説明

いつも、気づかないうちに時間というのは驚くほど早く過ぎていきます。小暑が過ぎ、中暑に突入しました。太...

MySQL の 3 つの Binlog 形式の概要と分析

1つ。 Mysql Binlog フォーマットの紹介 Mysql binlog ログには、State...

最適なウェブページ幅とその互換性のある実装方法

1. Web ページをデザインするときに、幅を決定するのは非常に面倒な作業です。 jb51.net ...