MySQL データの集約とグループ化

MySQL データの集約とグループ化

多くの場合、データを実際に取得せずに要約する必要があり、 MySQLこの目的のために特別な関数を提供します。これらの関数を使用すると、 MySQLクエリを使用して、分析やレポート生成のためのデータを取得できます。

このタイプの検索の例は次のとおりです。

  • テーブル内の行数 (または条件を満たす行数や特定の値を含む行数) を決定します。
  • テーブル内の行のグループの合計を取得します。
  • テーブル列(またはすべての行または特定の行)の最大値、最小値、平均値を見つける

のように:

AVG() は列の平均値を返します。COUNT() は列の行数を返します。MAX() は列の最大値を返します。MIN() は列の最小値を返します。SUM() は列の値の合計を返します。

例えば:

avg_priceとしてAVG(prod_price)を選択する
製品から

例えば:

ここで、 avgなどの一部の関数ではdistinctを設定できます。設定されている場合、このような現象が発生します。特定のビジネス ニーズに応じて、異なる値間の平均値のみをカウントします。

グループ化されたデータの説明は次のとおりです。

各サプライヤーが提供する製品の数を返します。

COUNT(*) を num_prods,vend_id として選択します
製品から
GROUP BY ベンダーID

group by使用する際の注意点:

  • GROUP BY句には任意の数の列を含めることができます。これにより、グループをネストして、データのグループ化をより細かく制御できるようになります。
  • GROUP BY子でグループ化をネストすると、データは最後に指定されたグループ化に基づいて集計されます。つまり、グループを作成すると、指定されたすべての列が一緒に計算されます(したがって、個々の列からデータを取得することはできません)。
  • GROUP BY句にリストされている各列は、検索列または有効な式 (集計関数ではない) である必要があります。 SELECTで式を使用する場合は、 GROUP BY句で同じ式を指定する必要があります。エイリアスは使用できません。
  • 集計計算ステートメントを除き、 SELECTステートメント内のすべての列はGROUP BY句で指定する必要があります。
  • グループ化列に NULL 値がある場合、グループとしてNULLが返されます。列に NULL 値を持つ行が複数ある場合は、それらはグループ化されます。
  • GROUP BY句は、WHERE 句の後、ORDER BY 句の前に記述する必要があります。

ROLLUPの使用WITH ROLLUPキーワードを使用すると、各グループの値と各グループの概要レベル (グループごと) を取得できます。

以下のように表示されます。

COUNT(*) を num_prods,vend_id として選択します
製品から
ROLLUP による GROUP BY vend_id

MySQLGROUP BYを使用してデータをグループ化するだけでなく、グループをフィルタリングして、含めるグループと除外するグループを指定することもできます。たとえば、少なくとも 2 件の注文があるすべての顧客をリストしたい場合があります。この種のデータを取得するには、個々の行ではなくグループ全体に基づいてフィルタリングする必要があります。

HAVINGWHEREの違いを理解する別の方法を次に示します。WHERE WHEREデータがグループ化される前にフィルタリングしますが、 HAVINGデータがグループ化された後にフィルタリングします。これは重要な区別です。WHERE ステートメントによって除外された行はグループ化に含まれません。これにより、計算された値が変更され、それらの値に基づいてHAVING句でフィルター処理されるグループに影響する可能性があります。

COUNT(*) を num_prods,vend_id として選択します
製品から
GROUP BY ベンダーID
カウント(*)>2

では、1 つのステートメントでWHERE句とHAVING句の両方を使用する必要があるのでしょうか?実際、あります。上記のステートメントをさらにフィルタリングして、過去 12 か月間に 2 回以上注文した顧客を返すとします。これを実現するには、 WHERE句を追加して、過去 12 か月以内に行われた注文を除外します。次に、 HAVING句を追加して、2 つ以上の順序を持​​つグループを除外します。

COUNT(*) を num_prods,vend_id として選択します
製品から
prod_price>=10の場合
GROUP BY ベンダーID

order byの紹介は次のとおりです。

GROUP BYORDER BY多くの場合同じ役割を果たしますが、その役割は非常に異なります。

ここで、 group byorder by同じ作業を完了すると述べられているのはなぜですか?これは、先ほど説明したように、データが実際には vend_id でソートされているように見えるためです。

GROUP BYでグループ化されたデータは、実際にはグループの順序で出力されることがよくあります。しかし、これは常に当てはまるわけではなく、SQL 仕様では必須ではありません。さらに、ユーザーはグループ化された順序以外の順序で並べ替えることを要求する場合があります。特定の方法でデータをグループ化したとしても (特定のグループ化集計値を取得するため)、出力を同じ方法で順序付ける必要があるわけではありません。

たとえその効果がGROUP BY句と同等であっても、明示的なORDER BY句を指定する必要があります。

ORDER BY通常、 GROUP BY句を使用する場合は、 ORDER BY句も指定する必要があります。これが、データが正しくソートされることを保証する唯一の方法です。データの並べ替えにGROUP BYのみに頼らないでください。

例えば:

COUNT(*) を num_prods,vend_id として選択します
製品から
prod_price>=10の場合
GROUP BY ベンダーID
num_prods で並べ替え


選択ステートメントのシーケンス:

SELECT 返す列または式 はい FROM データを取得するテーブル WHERE 行レベルのフィルタリング いいえ GROUP BY グループ化の指定 グループごとに集計を計算する場合にのみ使用します HAVING グループレベルのフィルタリング いいえ ORDER BY 出力のソート順 いいえ LIMIT 取得する行数 いいえ

これで、 mysqlデータの集約とグループ化に関するこの記事は終了です。MySQL mysqlグループ化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL でテーブル データを削除した後もディスク領域がまだ占有されているのはなぜですか?
  • MySQL インデックス データ構造の詳細な分析
  • MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明
  • 時間別にグループ化された MySQL クエリ ステートメント
  • MySQL データベース グループ クエリの group by ステートメントの詳細な説明
  • MySQL テーブル結合クエリでグループ化と重複排除を実装する例
  • MySQLグループクエリ最適化方法
  • 単語のグループ化シーケンスと複数フィールドのグループ化のための MySQL グループ方法

<<:  ページの下部にHTMLフッターを配置する簡単な方法

>>:  LinuxでLVMディスクを拡張する詳細な手順

推薦する

複数のネットワークカードを備えた Linux システムでのルーティング構成の詳細な説明

Linux でのルーティング設定コマンド1. ホストルーティングを追加する ルートを追加 -host...

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...

wavesurfer.js によるオーディオ波形描画の実装

1. レンダリングを見る進むを選択: 後方を選択: コードは次のとおりです(例): <テンプレ...

HTML ハイパーリンク タグ_Powernode Java アカデミー

HTML を学習したり使用したりしたことがある人なら、<a> タグについてよく知っている...

モバイルウェブ画面適応(rem)

序文最近、フロントエンドの学習に関する以前のメモを整理したところ、モバイル Web 画面の適応 (r...

Vue シンプル登録ページ + 確認コード送信機能の実装例

目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...

CSS セレクターの重みの理解(個人テスト)

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

JavaScript データ プロキシとイベントの詳細な分析

目次データブローカーとイベントObject.defineProperty メソッドのレビューデータブ...

Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

目次01 背景02 はじめに03 ワークフロー04 いくつかの質問05 ファイルをバックアップする0...

CocosCreatorでシューティングゲームを作る詳しい解説

目次シーン設定ゲームリソース砲塔の回転動的に生成された弾丸衝突計算効果を高めるターゲットの動き弾薬庫...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

Linux ファイル記述子、ファイルポインタ、および inode の詳細

目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...

Deepin で virtualenv をインストールして使用するチュートリアル

virtualenv は、分離された Python 仮想環境を作成するためのツールです。独立したディ...

Jenkins を使用した Vue プロジェクトのワンクリック パッケージングと公開の実装

目次Jenkinsのインストールインストールポート番号を変更します(デフォルトのポートは8080です...