MySQL の group by と order by を一緒に使用する方法

MySQL の group by と order by を一緒に使用する方法

テーブル:reward(報酬テーブル)があるとします。テーブル構造は次のようになります。

テーブルtest.rewardを作成します(
 id int(11) NOT NULL AUTO_INCREMENT、
 uid int(11) NOT NULL COMMENT 'ユーザーuid',
 お金 小数点(10, 2) NOT NULL COMMENT '報酬額',
 datatime datetime NOT NULL COMMENT 'time',
 主キー (id)
)
エンジン = INNODB
AUTO_INCREMENT = 1
文字セット utf8
utf8_general_ci を照合する
COMMENT = '報酬テーブル';

表のデータは次のとおりです。

ここで、各人が受け取った最高の報酬を照会し、それを最大から最小の順に並べ替える必要があります。

直接問い合わせる場合:

SELECT id, uid, money, datatime FROM reward GROUP BY uid ORDER BY money DESC;

以下の結果が得られます。

必要な結果が得られませんでした。これは、group by と order by を一緒に使用すると、最初に group by が使用され、グループ化後の最初のデータが取り出されるためです。したがって、その後の order by による並べ替えは、取り出された最初のデータに基づいて行われますが、最初のデータは必ずしもグループ内で最大のデータであるとは限りません。

方法1:

この場合、最初に並べ替え、次にグループ化し、サブクエリを使用できます。

選択
 取り除く、
 r.uid、
 r.お金、
 r.データタイム
から(選択
  id、
  uid、
  お金、
  データタイム
 報酬から
 金額順(降順)r
GROUP BY r.uid
ORDER BY r.money DESC;

方法2:

レコード全体を取得する必要がない場合は、max() min() を使用できます。

SELECT id, uid, money, datatime, MAX(money) FROM reward GROUP BY uid ORDER BY MAX(money) DESC;

結果は次のとおりです。

max() を使用して取得したレコードの money フィールドと max(money) フィールドに矛盾があることに気付いたかもしれません。これは、ここでは uid の最大値のみが取得され、最大値に対応するレコード全体が取得されないためです。

レコード全体を取得する必要がある場合は、このメソッドは使用できず、サブクエリを使用できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL データベース グループ クエリの group by ステートメントの詳細な説明
  • MySQL の group by と having の詳細な説明
  • MySQL の効率的なクエリの左結合とグループ化 (プラス インデックス)
  • MySQL Group by最適化の詳細な説明
  • MySQLのGROUP BYステートメントを最適化する方法
  • 複数のフィールドをグループ化するMySQLグループ
  • 各グループの最新データを取得するためにMySQLベースのグループを実装する
  • MySQL の group by に関する簡単な説明

<<:  JavaScriptオブジェクト指向について学ぼう

>>:  Nginxドメイン名転送のhttpsアクセスの実装

推薦する

VueプロジェクトにPWAを導入する手順

目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...

UDP 接続オブジェクトの原理分析と使用例

以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...

nginxのリソースキャッシュ設定の詳細な説明

私はずっとキャッシュについて学びたいと思っていました。結局のところ、キャッシュはフロントエンドのパフ...

CSS で放射状グラデーションを使用してカード効果を実現する

数日前、同僚がポイントモールプロジェクトを受け取りました。このプロジェクトには、カードやクーポンをギ...

Docker Compose で利用可能な環境変数の詳細な説明

Compose のいくつかの部分は、何らかの方法で環境変数を扱います。このチュートリアルは、必要な情...

VSCode と SSH を使用したリモート開発

0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...

iframeをカプセル化するvueコンポーネントを開発する

目次1. コンポーネントの紹介2. コンポーネントの内部構造とロジック1. コード組織構造2. マッ...

jsオブジェクトの読み取り速度の詳細な例

1. リテラルとローカル変数へのアクセスは最も高速ですが、配列要素とオブジェクト メンバーへのアクセ...

MySQLとOracleの違いを簡単に説明してください

1. Oracle は大規模データベースですが、MySQL は小規模から中規模のデータベースです。O...

初心者がソースコードからMySQLのデッドロック問題を理解する

夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...

VUE ユニアプリコア知識の簡単な紹介

目次仕様a. ページファイルはVueの単一ファイルコンポーネント仕様に準拠しています。 b. コンポ...

Vueブラウザが監視を再開するための具体的な手順

序文ページを共有するときに、ブラウザの戻るボタンをクリックしてプロジェクトのホームページに戻り、訪問...

Windows 10 Home EditionにDockerをインストールする方法を教えます

Redisの本やSpring Cloud Alibabaの本を執筆した際に、一部の分散コンポーネント...

CSS スタイルが機能しない (史上最も完全な解決策の概要)

ページを作成するときに、記述した CSS スタイルが有効にならないことがあります。この現象にはさまざ...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...