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アクセスの実装

推薦する

MySQL テーブルがロックされているかどうかを照会する方法

具体的な方法: (推奨チュートリアル:MySQLデータベース学習チュートリアル)テーブルロックの状態...

Centos7にTenda U12ワイヤレスネットワークカードドライバーをインストールする際の問題を解決する

解決プロセス:方法1: CentOS7.3 のデフォルトのカーネル バージョンは低く、3.10.0-...

JavaScript で 24 以上の配列メソッドを手動で実装する

目次1. トラバーサルクラス1. 各2. 地図3. すべての4. いくつか5. フィルター6. 減ら...

CSS3を使用して背景画像の色を変更するさまざまな方法

CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

Vue3におけるキーの役割と動作原理についての簡単な説明

このキー属性の機能は何ですか?まずは公式の説明を見てみましょう。 kekey 属性は主に、新しいノー...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

Linux 上の Vim で色とテーマを変更する方法

Vim は Linux でよく使用されるテキスト エディターです。 Vim は、Sublime や ...

バックエンド サーバー プロキシとして Nginx を推奨する理由 (理由分析)

1. はじめに実際のサーバーはパブリックインターネットに直接公開されるべきではありません。そうしな...

JS を使用して HTML で回転するクリスマスツリーを実装する

<!DOCTYPE ヘムル パブリック> <html> <ヘッド&g...

vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)

導入この章では、主に Linux で FTP サーバーを構築するプロセスを紹介します。習得すべき重要...

mysqlはルートユーザーと一般ユーザーを作成し、機能を変更および削除します。

方法1: SET PASSWORDコマンドを使用する mysql -u ルート mysql> ...

クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明

k8s の最小のスケジューリング単位 --- pod前回の記事では、k8s が解決できる問題を簡単に...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

ビジネス HTML メール作成に関する提案

許可ベースの電子メール マーケティングにより、マーケティングとプロモーションのコストを大幅に削減でき...