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ディスクを拡張する詳細な手順

推薦する

インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...

W3C チュートリアル (4): W3C XHTML アクティビティ

HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...

Echart Bar の 2 列チャート スタイルの最も完全な詳細な説明

目次序文インストールと設定1. Echartsをインストールする2. Echartsをグローバルに導...

Vueはログインジャンプを実装する

この記事では、ログインジャンプを実装するためのVueの具体的なコードを例として紹介します。具体的な内...

各 Nginx プロセスで開くことができるファイルの最大数を設定する方法

1. システム内で開いているファイルの最大数を確認する #現在のリソース制限設定を表示する ulim...

CocosCreator でカメラトラッキングに cc.follow を使用する方法

Cocos Creator バージョン: 2.3.4デモのダウンロード: https://files...

CentOS 7 で yum を使用して MySQL 5.7.20 をインストールする最も簡単な方法

CentOS7 のデフォルトのデータベースは mariadb ですが、mysql を使っている人も多...

Docker 実行オプションを使用して Dockerfile の設定を上書きする

通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...

React でカレンダー コンポーネントを構築するためのステップ バイ ステップ ガイド

目次事業背景テクノロジーの活用技術的な問題デザインのアイデア😱 困惑と苦痛に満ちた顔🙄考え始める🌲デ...

Vue3における非親子コンポーネント通信の詳細な説明

目次最初の方法アプリ.vueホーム.vueホームコンテンツ.vueデータの応答性レスポンシブプロパテ...

Docker環境にJenkinsコンテナをインストールする詳細なチュートリアル

推奨される Docker 学習教材: https://www.runoob.com/docker/d...

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

MYSQLはUnionを使用して2つのテーブルのデータを結合し、表示します。

UNION演算子の使用union : 2 つ以上の SELECT ステートメントの結果を 1 つの...

コネクタコンポーネントから Tomcat のスレッドモデルを見る - BIO モード (推奨)

Tomcat の上位バージョンでは、デフォルト モードは NIO モードを使用することになります。...

ウェブページを作成する際に注意すべき点

--ホームページのバックアップ1.txtテキスト2. 画像をスキャンする3. PSDデザイン原画(A...