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

推薦する

JavaScript 型検出方法の例のチュートリアル

序文JavaScriptはWebフロントエンドで広く使われている言語の一つであり、Webアプリケーシ...

Nginx Rewriteモジュールを使用するいくつかのシナリオ

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

Vue 仮想 DOM クイックスタート

目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...

node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindo...

CocosCreator ソースコードの解釈: エンジンの起動とメインループ

目次序文準備行く!文章プロセスを開始するメインループまとめ要約する序文準備皆さんは、こんなことを考え...

MySQL マスターライブラリ binlog (master-log) とスレーブライブラリ relay-log 間のコードの詳細な説明

メインライブラリのバイナリログ: # 2420 で #170809 17:16:20 サーバー ID...

JSはシンプルなカウンターを実装します

HTML CSS および JavaScript を使用して、プラス、マイナス、ゼロの 3 つのボタン...

MySQL は正常に起動するがポートをリッスンしない場合の解決策

問題の説明MySQL が正常に起動しました。以下に示すように、 ps -ef |grep mysql...

MySQL で特定の日、月、または年のデータをクエリするためのコードの詳細な説明

今日 テーブル名から * を選択します。ここで、to_days(時間フィールド名) = to_day...

スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)

効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...

クリーンで美しいウェブデザインのための4つの原則

この記事では、 Webデザインに関連するこれら4 つの原則について説明します。これら4 つの原則を念...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

Webフロントエンド開発コース Webフロントエンド開発ツールとは

インターネット技術の発展に伴い、ユーザーはますます Web ページに依存するようになり、Web フロ...

...

Tomcat ソースコード起動コンソールの中国語文字化けのデバッグプロセス記録

問題を見つける今日はTomcatのソースコードを勉強するつもりなので、公式サイトからTomcatのソ...