ホームページ  >  記事  >  データベース  >  mysqlで平均値を求める方法

mysqlで平均値を求める方法

青灯夜游
青灯夜游オリジナル
2021-12-02 11:29:3344215ブラウズ

mysql では、AVG() 関数を使用して平均を見つけることができます。この関数は、返された行数とデータの各行の合計を計算することによって、指定された列データの平均を見つけることができます。構文「SELECT AVG (列名) FROM テーブル名」。

mysqlで平均値を求める方法

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

mysql では、AVG() 関数を使用して平均を見つけることができます。

MySQL AVG() 関数は、一連の値または式の平均を計算するために使用される集計関数です。

AVG() 関数は、返された行の数とデータの各行の合計を計算することによって、指定された列データの平均を見つけることができます。

AVG() 関数の構文は次のとおりです。

SELECT AVG(column_name) FROM table_name;

DISTINCT 演算子を AVG() 関数に追加して、さまざまな値の平均を計算することもできます。たとえば、一連の値 1123 がある場合、AVG() 関数は次のようになります。 DISTINCT 演算は異なる値を返します。値の合計は (1 2 3)/3 = 2.00 となります。

MySQL AVG の例

デモ用にサンプル データベースの products テーブルを使用します。次の図は、products テーブルの構造です。 -

mysql> desc products;
+--------------------+---------------+------+-----+---------+------------------+
| Field              | Type          | Null | Key | Default | Extra            |
+--------------------+---------------+------+-----+---------+------------------+
| productCode        | varchar(15)   | NO   | PRI |         |                  |
| productName        | varchar(70)   | NO   | MUL | NULL    |                  |
| productLine        | varchar(50)   | NO   | MUL | NULL    |                  |
| productScale       | varchar(10)   | NO   |     | NULL    |                  |
| productVendor      | varchar(50)   | NO   |     | NULL    |                  |
| productDescription | text          | NO   |     | NULL    |                  |
| quantityInStock    | smallint(6)   | NO   |     | NULL    |                  |
| buyPrice           | decimal(10,2) | NO   |     | NULL    |                  |
| MSRP               | decimal(10,2) | NO   |     | NULL    |                  |
| stockValue         | double        | YES  |     | NULL    | STORED GENERATED |
+--------------------+---------------+------+-----+---------+------------------+
10 rows in set

products テーブル内のすべての製品の平均価格を計算するには、次のクエリに示すように AVG 関数を使用できます。上記のクエリ ステートメントを実行すると、次の結果が得られます。

SELECT AVG(buyprice) 'Avarage Price' FROM products;

FORMAT

関数は、AVG 関数によって返される平均値をフォーマットするために使用されることに注意してください。

WHERE

句を SELECT ステートメントに追加して、値のサブセットの平均を計算できます。たとえば、製品ライン Classic Cars の製品の平均価格を計算するには、次のクエリを使用できます: <pre class="brush:sql;toolbar:false;">mysql> SELECT AVG(buyprice) &amp;#39;Avarage Price&amp;#39; FROM products; +---------------+ | Avarage Price | +---------------+ | 54.395182 | +---------------+ 1 row in set</pre>上記のクエリ ステートメントを実行すると、次の結果が得られます-

SELECT AVG(buyprice) &#39;Avarage Classic Cars Price&#39;
FROM products
WHERE productline = &#39;Classic Cars&#39;;

DISTINCT を使用した MySQL AVG() 関数

一部の製品は同じ価格なので、次のクエリを使用して確認できます。上記のクエリ ステートメントを実行すると、次の結果が得られます。

mysql> SELECT AVG(buyprice) &#39;Avarage Classic Cars Price&#39;
FROM products
WHERE productline = &#39;Classic Cars&#39;;
+----------------------------+
| Avarage Classic Cars Price |
+----------------------------+
| 64.446316                  |
+----------------------------+
1 row in set

AVG() 関数を使用して、以下に示すように

DISTINCT

演算子を追加することで、さまざまな価格の平均を計算できます。

SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;

上記のクエリ ステートメントを実行すると、次の結果が得られます。 -

mysql> SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;
+--------------------------------------------+
| COUNT(buyprice) - COUNT(DISTINCT buyprice) |
+--------------------------------------------+
|                                          2 |
+--------------------------------------------+
1 row in set
結果は、DISTINCT

演算子を使用した平均価格とはわずかに異なります。

GROUP BY 句を使用した MySQL AVG

私たちは、行の各グループの値を計算するために、

GROUP BY 句を使用した AVG 関数をよく使用します。表の平均値です。

たとえば、各製品ラインの製品の平均価格を計算するには、次のクエリのように、

GROUP BY 句を指定した AVG 関数を使用します。 ## 上記のクエリ ステートメントを実行すると、次の結果が得られます。

SELECT AVG(DISTINCT buyprice) FROM products;

MySQL AVG with HAVING 句

HAVING

サブAVG 関数の子 文はグループ平均の条件を設定します。たとえば、平均製品価格が

50 を超える製品ラインのみを選択する場合は、次のクエリを使用できます。
mysql> SELECT AVG(DISTINCT buyprice) FROM products;
+------------------------+
| AVG(DISTINCT buyprice) |
+------------------------+
| 54.372870              |
+------------------------+
1 row in set

上記のクエリ ステートメントを実行すると、次の結果が得られます。 -

SELECT productline,
       AVG(buyprice) &#39;Avarage Price&#39;
FROM products
GROUP BY productline;
MySQL AVG() 関数とサブクエリ

SQL ステートメント内で AVG() 関数を複数回使用して、一連の平均値の平均を計算できます。 。たとえば、製品ラインの平均購入価格は次のように計算できます。

mysql> SELECT productline,
       AVG(buyprice) &#39;Avarage Price&#39;
FROM products
GROUP BY productline;
+------------------+---------------+
| productline      | Avarage Price |
+------------------+---------------+
| Classic Cars     | 64.446316     |
| Motorcycles      | 50.685385     |
| Planes           | 49.629167     |
| Ships            | 47.007778     |
| Trains           | 43.923333     |
| Trucks and Buses | 56.329091     |
| Vintage Cars     | 46.066250     |
+------------------+---------------+
7 rows in set

上記のクエリ ステートメントを実行すると、次の結果が得られます-

SELECT productline, AVG(buyprice) &#39;Avarage Price&#39; FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
実行方法-

サブクエリ

製品ラインに基づいて平均購入価格を計算します。

外側のクエリは、サブクエリから返された製品ラインの平均購入価格を計算します。

  • NULL 値を含む MySQL AVG 関数
  • AVG() 関数は計算で
  • NULL
値を無視します。次の例:

最初に

、2 つの列

idval

,# # を持つ

t という名前の新しいテーブルを作成します。 #val 列には NULL 値を含めることができます。 <pre class="brush:js;toolbar:false;">mysql> SELECT productline, AVG(buyprice) &amp;#39;Avarage Price&amp;#39; FROM products GROUP BY productline HAVING AVG(buyprice) &gt; 50; +------------------+---------------+ | productline | Avarage Price | +------------------+---------------+ | Classic Cars | 64.446316 | | Motorcycles | 50.685385 | | Trucks and Buses | 56.329091 | +------------------+---------------+ 3 rows in set</pre>2 番目の t テーブルに NULL 値を含むいくつかの行を挿入します。

SELECT AVG(pl_avg) &#39;Average Product&#39;
FROM (
    SELECT AVG(buyprice) pl_avg
    FROM products
    GROUP BY productline
) avgs;

3 番目の AVG() 関数を使用して、val 列の値の平均を計算します。

mysql> SELECT AVG(pl_avg) &#39;Average Product&#39;
FROM (
    SELECT AVG(buyprice) pl_avg
    FROM products
    GROUP BY productline
) avgs;
+-----------------+
| Average Product |
+-----------------+
| 51.1553314286   |
+-----------------+
1 row in set

Execute 上記のクエリ ステートメントは次の結果を生成します -

CREATE TABLE IF NOT EXISTS t(
    id  int auto_increment primary key,
    val int
);
NULL 値が計算に含まれていないため、このステートメントは予想どおり 2 を返します。 AVG関数。

制御フロー関数を使用した MySQL AVG

カラムの平均を計算し、単一のステートメントで同じカラムの平均を条件付きで計算するには、AVG 関数を使用できます。フロー関数 (IFCASE

IFNULLNULLIF

など) を制御します。

たとえば、クラシックカー製品ラインの平均価格とすべての製品の平均価格の比率を計算するには、次のステートメントを使用します:

INSERT INTO t(val)
VALUES(1),(2),(nulL),(3);
上記のクエリ ステートメントを実行すると、次の結果が得られます。
SELECT AVG(val) FROM t;
製品ラインが Classic Cars

の場合、

IF(productline='Classic Cars',buyprice,NULL) 式は価格を返します。それ以外の場合は NULL

を返します。

AVG 関数は計算で NULL 値を無視するため、AVG(IF(productline ='Classic Cars', buyprice, NULL)) 式は製品ラインのみを計算します。は、クラシックカー製品の平均価格です。

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysqlで平均値を求める方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。