第12章では、データをまとめたもの
記事のディレクトリ
学習SQLは何であるの集計関数どのようにそれらを使用すると、データサマリー表を。
シンプルな記録 - MySQLは知っていなければならないだろう - [英語]ベン・フォータ
集計関数は、データをまとめます
図1に示すように、集約関数
私たちはしばしば、実際に取得し、それらなしでデータを集約、特殊機能MySQLを提供することを目的にする必要があります。これらの機能を使用して、MySQLのクエリは、分析やレポート生成のために、データを取得するために使用することができます。実際に欲しい情報を集約しています
以下に示すように、検索のこのタイプを促進するために、MySQLは、5つの集計関数を与えます。これらの機能は、情報をまとめることができます。
SQL集約関数
函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小
SUM() 返回某列之和
AVG()、COUNT()、MAX()、分()、SUM()
集約関数(集計関数):
ラインランニング、計算機能上のグループと1つの値を返します。
以下に、各機能の説明があります。
1.1、AVG()関数AVG()
得るために、テーブルの行数をカウントし、特定の列の和を計算することによりAVG()列の平均値。
AVG()は、特定の列または行の平均値を返すために使用することができるすべての列の平均値を返すために使用されます。特定の列の値/平均値=カウントをカラムの行数を決定しました。
AVG()
次の例は、(AVGを使用して)すべての製品の製品テーブル平均価格を返します。
mysql> SELECT AVG(prod_price) AS avg_price FROM products;
+-----------+
| avg_price |
+-----------+
| 16.133571 |
+-----------+
1 row in set (0.01 sec)
mysql>
AVG(prod_price) AS avg_price
avg_priceは別名です。
AVGは()も使用することができる特定の列または行の平均値を決定します。(だけではなく、列のすべての行の平均値)、プラスフィルタ条件。
次の例では、製品の平均価格を提供するために、特定のベンダーを返します。
mysql> SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id = 1003;
+-----------+
| avg_price |
+-----------+
| 13.212857 |
+-----------+
1 row in set (0.00 sec)
mysql> SELECT vend_id,prod_price FROM products WHERE vend_id = 1003;
+---------+------------+
| vend_id | prod_price |
+---------+------------+
| 1003 | 13.00 |
| 1003 | 10.00 |
| 1003 | 2.50 |
| 1003 | 50.00 |
| 1003 | 4.49 |
| 1003 | 2.50 |
| 1003 | 10.00 |
+---------+------------+
7 rows in set (0.00 sec)
mysql>
その他のWHERE句より。句フィルタのみ1003製品、ベンダーの製品の平均値のみので、返さavg_priceをvend_id WHEREこれ。
AVG()が単一の列に使用され、特定の列の平均値を決定するために使用することができ、列名は、関数のパラメータとして与えられなければなりません。複数列の平均値を得るためには、AVG()関数の複数を使用しなければなりません。avg(列名),avg(列名)...
注:NULL値AVG()関数は、行の列の値がNULLである無視します。それはカウントされません。
1.2、COUNT()関数count()
COUNT()関数がカウントされます。利用可能なCOUNT()は満たす特定の基準そのテーブル内の行または行の数を決定します。COUNT()関数は、2つの方法で使用されます。
- 利用回数(
*
表の列に関係なく、テーブル内の行の数をカウントする)はヌル値(NULL)または非ヌル値を含みます。(COUNTの*
数)の統計情報のすべての行 - 特定の列の値のカウントのNULL値の列を有する使用カウント(列)は無視されます。COUNT()NULL技術を無視
次の例では、クライアントの顧客テーブルの総数を返します。
mysql> SELECT COUNT(*) AS num_cust FROM customers;
+----------+
| num_cust |
+----------+
| 5 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT * FROM customers;
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+---------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+---------------------+
| 10001 | Coyote Inc. | 200 Maple Lane | Detroit | MI | 44444 | USA | Y Lee | [email protected] |
| 10002 | Mouse House | 333 Fromage Lane | Columbus | OH | 43333 | USA | Jerry Mouse | NULL |
| 10003 | Wascals | 1 Sunny Place | Muncie | IN | 42222 | USA | Jim Jones | [email protected] |
| 10004 | Yosemite Place | 829 Riverside Drive | Phoenix | AZ | 88888 | USA | Y Sam | [email protected] |
| 10005 | E Fudd | 4545 53rd Street | Chicago | IL | 54545 | USA | E Fudd | NULL |
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+---------------------+
5 rows in set (0.00 sec)
mysql>
SELECT COUNT(*) AS num_cust FROM customers;
COUNT(*)を使用すると、関係なく、各列の値の何行目の、すべての行をカウントし、カウント値がnum_custに返されます。
次の例では、メールアドレスのみカウントしているお客様のためにあります:
mysql> SELECT COUNT(cust_email) AS num_cust FROM customers;
+----------+
| num_cust |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
mysql>
分析を使用して、このSELECT文COUNT(cust_email)
のcust_email
行の値を持つ列がカウントされます。この例では、CUST_EMAIL 3のカウント(顧客が電子メールアドレスを持っている唯一の3 5クライアントを示すには、電子メールアドレス2はnoです)。
注:NULL値列名が指定されている場合、指定された行が空欄であるが、COUNT()関数では無視されるが、COUNT()は、アスタリスク(*)の関数である場合、無視できません。
1.3、MAX()関数max()
MAX()は、指定された列内の最大値を返します。MAXは()次のようにカラム名を指定する必要があります。
mysql> SELECT MAX(prod_price) AS max_price FROM products;
+-----------+
| max_price |
+-----------+
| 55.00 |
+-----------+
1 row in set (0.01 sec)
mysql> SELECT prod_price FROM products;
+------------+
| prod_price |
+------------+
| 5.99 |
| 9.99 |
| 14.99 |
| 13.00 |
| 10.00 |
| 2.50 |
| 3.42 |
| 35.00 |
| 55.00 |
| 8.99 |
| 50.00 |
| 4.49 |
| 2.50 |
| 10.00 |
+------------+
14 rows in set (0.00 sec)
mysql>
ここで、MAX()は最も高価なアイテムで製品の定価を返します。SELECT MAX(prod_price) AS max_price FROM
最高価格のアイテム。
注:MAX()は、非数値データの使用
MAX()は、一般的に最大値または日付値を見つけるために使用されるが、MySQLにそれを可能にしているが、テキスト列が最大値を返すなど、任意の列内の最大値を返します。データは、対応する列に従ってソートされている場合と、テキストデータは、MAX()は最後の行を返します。
mysql> SELECT MAX(prod_name) FROM products;
+----------------+
| MAX(prod_name) |
+----------------+
| TNT (5 sticks) |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT prod_name FROM products;
+----------------+
| prod_name |
+----------------+
| .5 ton anvil |
| 1 ton anvil |
| 2 ton anvil |
| Detonator |
| Bird seed |
| Carrots |
| Fuses |
| JetPack 1000 |
| JetPack 2000 |
| Oil can |
| Safe |
| Sling |
| TNT (1 stick) |
| TNT (5 sticks) |
+----------------+
14 rows in set (0.00 sec)
mysql>
)(実際、最大最後のものであるのパラメータ文字列を返します。
NULL値MAX()関数は、行の列の値がNULLである無視します。
1.4、MIN()函数 min()
最小値は、列を指定返すMAX関数にMIN()関数を正確に()は反対。次の例に示すように、MAX()と同様に、MIN()は、列名を指定する必要が:
mysql> SELECT prod_price FROM products;
+------------+
| prod_price |
+------------+
| 5.99 |
| 9.99 |
| 14.99 |
| 13.00 |
| 10.00 |
| 2.50 |
| 3.42 |
| 35.00 |
| 55.00 |
| 8.99 |
| 50.00 |
| 4.49 |
| 2.50 |
| 10.00 |
+------------+
14 rows in set (0.00 sec)
mysql> SELECT MIN(prod_price) AS min_price FROM products;
+-----------+
| min_price |
+-----------+
| 2.50 |
+-----------+
1 row in set (0.00 sec)
mysql>
ここで、MIN()は製品テーブル安いアイテムを返します。
それはテキスト列は最小値を返すなど、任意の列内の最小値に戻ることができるように使用MIN MAX()関数に似た非数値データのための()MIN()関数は、MySQL。ときにデータが対応する列に従ってソートされている場合、テキストデータは、MIN()は一番上の行を返します。
例としては、次のとおりです:
mysql> SELECT min(prod_name) FROM products;
+----------------+
| min(prod_name) |
+----------------+
| .5 ton anvil |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT prod_name FROM products;
+----------------+
| prod_name |
+----------------+
| .5 ton anvil |
| 1 ton anvil |
| 2 ton anvil |
| Detonator |
| Bird seed |
| Carrots |
| Fuses |
| JetPack 1000 |
| JetPack 2000 |
| Oil can |
| Safe |
| Sling |
| TNT (1 stick) |
| TNT (5 sticks) |
+----------------+
14 rows in set (0.00 sec)
mysql>
NULL値MIN()関数は、行の列の値がNULLである無視します。
1.5、SUM()関数sum()
SUM()は、指定された列と、(合計)の値を返すために使用されます。
ここでは一例であり、のOrderItems順位テーブルには、各項目に対応した数(量)を有し、実際の項目を含みます。合計(すべての値および数量)、次のように注文した商品を検索することがあります。
mysql> SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
+---------------+
| items_ordered |
+---------------+
| 19 |
+---------------+
1 row in set (0.00 sec)
mysql>
SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;
関数SUM(量)句は、統計のみアイテム注文項目ことを保証するためにすべての項目と、の注文の数を返します。
SUM()はまた、合計値を計算するために使用することができます。次の例では、各項目の合計はitem_price*quantity
、全順序の量を求めます。
mysql> SELECT SUM(item_price*quantity) AS total_price FROM orderitems WHERE order_num = 20005;
+-------------+
| total_price |
+-------------+
| 149.87 |
+-------------+
1 row in set (0.00 sec)
mysql>
SELECT SUM(item_price*quantity) AS total_price FROM orderitems WHERE order_num = 20005;
関数SUM(ITEM_PRICE *数量)句は項目だけのオーダー・アイテムと同じ統計ことを保証するためにすべての商品の価格の合計を返すためです。
複数の列に基づいて計算
この例に示すように、標準的な算術演算子を使用して、集計関数は、すべての複数の列に計算を実行するために使用することができます。- + * /
NULL値SUM()関数無視行列の値はNULLです。
図2に示すように、異なる値の集合
DISTINCT集計関数が使用されています。明確な
次のように5つの以上の集計関数を使用することができます。
- すべての行の計算を実行し、(ALLがデフォルトの動作であるため)しないようにALLまたは複数のパラメータを指定します。
- 唯一異なる値が含まれています、DISTINCTパラメータを指定します。
ALLがデフォルトです
それはデフォルトの動作であるため、すべてのパラメータは、指定する必要はありません。DISTINCTを指定しない場合は、ALLを想定しています。
次の例では、AVG()関数は、特定のベンダーの製品の平均価格を返します使用しています。これは、上記のSELECT文と同じですが、DISTINCTパラメータを使用して、これだけ異なる価格(削除重複)の平均を考慮してください。
mysql> SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;
+-----------+
| avg_price |
+-----------+
| 15.998000 |
+-----------+
1 row in set (0.01 sec)
mysql>
ことが分かるSELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;
同じ低価格を持つ複数の物品があるので、DISTINCT使用した後、avg_priceこの例では、比較的高いです。彼らは平均的な価格を持ち上げる除外しました。
ご注意ください
あなたは、列名を指定した場合のみ)(DISTINCT COUNTを使用することができます。
DISTINCT缶は、使用COUNT(*)でなく、従って、COUNT(DISTINCT)、またはエラーを許可しません。
mysql> SELECT COUNT(DISTINCT prod_price) FROM products WHERE vend_id = 1003;
+----------------------------+
| COUNT(DISTINCT prod_price) |
+----------------------------+
| 5 |
+----------------------------+
1 row in set (0.01 sec)
mysql> SELECT prod_price FROM products WHERE vend_id = 1003;
+------------+
| prod_price |
+------------+
| 13.00 |
| 10.00 |
| 2.50 |
| 50.00 |
| 4.49 |
| 2.50 |
| 10.00 |
+------------+
7 rows in set (0.00 sec)
mysql> SELECT COUNT(prod_price) FROM products WHERE vend_id = 1003;
+-------------------+
| COUNT(prod_price) |
+-------------------+
| 7 |
+-------------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(DISTINCT ) FROM products WHERE vend_id = 1003;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') FROM products WHERE vend_id = 1003' at line 1
mysql>
同様に、DISTINCT列名が使用され、または計算式に使用されていないする必要があります。
技術的にDISTINCTは、MIN()()のために使用することができるが、MIN()およびMAX()とMAXのためにDISTINCTが、これは実際には価値がありません。かかわらず、異なる値を含む列が同じであるかどうかの最小値と最大値。
重複した個別の値を削除します。
図3に示すように、集約関数の組み合わせ
集約関数の例としては、すべてのこれまでのところ唯一つの機能を必要とします。必要に応じしかし、実際にはSELECT文が複数の集計関数を含めることができます。次の例を考えてみましょう:テーブル統計製品の項目数、最低の製品価格だけでなく、最高の平均値
mysql> SELECT COUNT(*) AS num_items,MIN(prod_price) AS price_min,MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM products;
+-----------+-----------+-----------+-----------+
| num_items | price_min | price_max | price_avg |
+-----------+-----------+-----------+-----------+
| 14 | 2.50 | 55.00 | 16.133571 |
+-----------+-----------+-----------+-----------+
1 row in set (0.00 sec)
mysql>
MIN(prod_price) AS price_min
... AS 别名
エイリアスを指定するエイリアスは集約関数の結果は、実際のテーブルの列名に使用すべきではない含めます。これは違法ではありませんが、名前のみを使用することは理解して使用(簡単なトラブルシューティング、および将来の)ためにあなたのSQLが容易になりますが。
4.まとめ
集計関数は、データを要約します。MySQLは集約関数の数をサポートし、あなたは彼らが返す必要が結果を使用するには、いくつかの方法を使用することができます。これらの機能は、効率的に、彼らははるかに速く、独自のクライアントアプリケーションよりも一般的には、計算の結果を返し、設計されています。すべての後、MySQLはデータ処理のためのデータベース管理システムです。
AVG()は、特定の列または行の平均値を返すために使用することができるすべての列の平均値を返すために使用されます。
COUNT()関数がカウントされます。利用可能なCOUNT()は満たす特定の基準そのテーブル内の行または行の数を決定します。COUNT()関数は、2つの方法で使用されます。
- 利用回数(
*
表の列に関係なく、テーブル内の行の数をカウントする)はヌル値(NULL)または非ヌル値を含みます。(COUNTの*
数)の統計情報のすべての行 - 特定の列の値のカウントのNULL値の列を有する使用カウント(列)は無視されます。COUNT()技術は、NULLを無視します。
MAX()は、指定された列内の最大値を返します。MAXは()カラム名を指定する必要があります。
最小値は、列を指定返すMAX関数にMIN()関数を正確に()は反対。そして、MAX()()MIN、同じ列名を指定する必要があります。
SUM()は、指定された列と、(合計)の値を返すために使用されます。
DISTINCT集計関数が使用されています。明確な
次のように5つの以上の集計関数を使用することができます。
- すべての行の計算を実行し、(ALLがデフォルトの動作であるため)しないようにALLまたは複数のパラメータを指定します。
- 唯一異なる値が含まれています、DISTINCTパラメータを指定します。
重複した個別の値を削除します。
機能は、骨材の組み合わせを使用しています。