group by は「グループ クエリ」を意味し、「特定のルールに従って (グループ化して) グループ化する」と理解できます。その機能は、特定のルール領域を通じてデータ セットをいくつかの小さなグループに分割することです。次に、いくつかの小さな領域に対してデータ処理を実行します。 MySQL では、GROUP BY は 1 つ以上のフィールドに基づいてクエリ結果をグループ化するために使用される SELECT ステートメントのオプションの句で、結果セット内の行数を減らします。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
group by は「グループ クエリ」を意味します。
Group By ステートメントは、英語で直訳すると「特定のルールに従って (グループに) グループ化する」という意味です。その機能は、データセットを特定のルールに従っていくつかの小領域に分割し、いくつかの小領域に対してデータ処理を実行することです。
MySQL では、GROUP BY キーワードを使用して、1 つ以上のフィールドに基づいてクエリ結果をグループ化できます。
GROUP BY 句は、列または式の値に基づいて、一連の行を要約行レコードの小さなグループにグループ化します。 GROUP BY 句は、グループごとに 1 行を返します。つまり、結果セット内の行数が減ります。
GROUP BY 句は、SUM、AVG、MAX、MIN、COUNT などの集計関数とともによく使用されます。集計関数は、各グループに関する情報を計算するために SELECT 句で使用されます。
GROUP BY 句は、SELECT ステートメントのオプションの句です。 GROUP BY 句の構文は次のとおりです。
SELECT c1, c2,..., cn, aggregate_function(ci) FROM table WHERE where_conditions GROUP BY c1 , c2,...,cn;
GROUP BY 句は、FROM 句と WHERE 句の後に指定する必要があります。 GROUP BY キーワードの後には、行をグループ化する条件として使用される列または式のカンマ区切りのリストが続きます。
1. シンプルな MySQL GROUP BY の例
サンプル データベースを見てみましょう ( yiibaidb )、その構造は次のとおりです。 -
mysql> desc orders;
注文ステータスの値をサブグループにグループ化すると仮定すると、GROUP BY 句を使用する必要があります。ステータス列によるグループ化を指定し、次のようにクエリします。
SELECT status FROM orders GROUP BY status;
上記のクエリ ステートメントを実行すると、次の結果が得られます。
GROUP BY 句の戻り値は一意です。次のクエリに示すように、DISTINCT 演算子と同様に機能します。
SELECT DISTINCT status FROM orders;
上記のクエリ ステートメントを実行すると、次の結果が得られます-
2 、MySQL GROUP BY および集計関数
集計関数を使用すると、行のグループに対して計算を実行し、単一の値を返すことができます。 GROUP BY 句は、グループごとに計算を実行して単一の値を返すために、集計関数とともによく使用されます。
たとえば、各ステータスの注文数を知りたい場合は、以下に示すように COUNT 関数と GROUP BY 句クエリ ステートメントを使用できます。
SELECT status, COUNT(*) AS total_number FROM orders GROUP BY status;
上記を実行します。クエリ ステートメントを実行すると、次の結果が得られます -
次の注文 (orders) テーブルと注文詳細 (orderdetails) テーブルを参照してください。その ER 図は次のとおりです-
ステータスごとにすべての注文の合計金額を取得するには、orderdetails テーブルを使用して注文テーブルを接続し、SUM 関数を使用して合計金額を計算します。次のクエリを参照してください。
SELECT status, SUM(quantityOrdered * priceEach) AS amount FROM orders INNER JOIN orderdetails USING (orderNumber) GROUP BY status;
上記のクエリを実行すると、次の結果が得られます。 -
同様に、次のクエリは注文番号と各注文の合計金額。
SELECT orderNumber, SUM(quantityOrdered * priceEach) AS total FROM orderdetails GROUP BY orderNumber;
上記のクエリを実行すると、次の結果が得られます-
3. MySQL GROUP BY 式の例
列に加えて、行も式によってグループ化できます。次のクエリは、年間の総売上高を取得します。
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY YEAR(orderDate);
上記のクエリを実行すると、次の結果が得られます。 -
この例では、YEAR 関数を使用して、注文日 (注文日)。ステータスが「発送済み」の注文のみが含まれます。 SELECT 句に使用する式は、GROUP BY 句の式と同じである必要があることに注意してください。
HAVING 句を使用して、GROUP BY 句によって返されたグループをフィルタリングできます。次のクエリでは、HAVING 句を使用して 2013 年以降の年間売上合計を選択します。
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY year HAVING year > 2013;
上記のクエリを実行すると、次の結果が得られます -
标准SQL不允许使用GROUP BY子句中的别名,但MySQL支持此选项。以下查询从订单日期提取年份,并对每年的订单进行计数。该year用作表达式YEAR(orderDate)的别名,它也用作GROUP BY子句中的别名,此查询在标准SQL中无效。
参考以下查询 -
SELECT YEAR(orderDate) AS year, COUNT(orderNumber) FROM orders GROUP BY year;
执行上面查询,得到以下结果 -
MySQL还允许您以升序或降序(标准SQL不能提供)对组进行排序。默认顺序是升序。例如,如果要按状态获取订单数量并按降序对状态进行排序,则可以使用带有DESC的GROUP BY子句,如下查询语句:
SELECT status, COUNT(*) FROM orders GROUP BY status DESC;
执行上面查询,得到以下结果 -
请注意,在GROUP BY子句中使用DESC以降序对状态进行排序。我们还可以在GROUP BY子句中明确指定ASC,按状态对分组进行升序排序。
【相关推荐:mysql视频教程】
以上がグループ化とはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。