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

推薦する

MySQLの再帰問題

MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...

背景画像のみを180度回転させるCSS3実装例

1. 心の旅最近コックピットを書いていたときに、背景画像を単純に特定の角度に回転させるという問題につ...

Javascriptでビルダーパターンを実装する方法

概要ビルダー パターンは比較的単純なデザイン パターンであり、作成パターンに属します。定義: 複雑な...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

Ubuntu ブート自動起動サービス設定

Ubuntu でサービスを作成し、自動的に起動する方法: 1. [/lib/systemd/syst...

クラウド サーバー Ubuntu_Server_16.04.1 に MySQL をインストールしてリモート接続を有効にする方法

1. MySQLをインストールします。対応するソフトウェアをインストールするには、次の 3 つのコマ...

共有サイドバーを実装するためのネイティブJS

この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...

vue.js パッケージ化プロジェクトの後の空白ページの解決策

Vueに触れたばかりのパートナーの多くは、開発環境ではVueプロジェクトは正常であるが、パッケージ化...

JS関数の呼び出し、適用、バインドの超詳細な方法

目次JS 関数呼び出し、適用、バインドメソッド1. call() メソッド1. call() メソッ...

Vueのハッシュジャンプ原理の詳細な説明

目次ハッシュと履歴の違いハッシュ履歴getCurrentLocation の実装setupListe...

nginxカスタム変数と組み込み定義済み変数の使用

概要Nginx では変数を使用して設定を簡素化し、設定の柔軟性を向上させることができます。すべての変...

Vue+flaskで動画合成機能を実現(ドラッグ&ドロップアップロード)

目次ドラッグアンドドロップアップロードについては以前の記事で書きました。ファイルをアップロードするF...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

Linux ディレクトリ切り替え実装コード例

ファイルの切り替えは Linux でよく行われる操作です。Linux を初めて学ぶときに最初に触れる...

MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

Redis の紹介Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、...