mysql では、AVG() 関数を使用して平均を見つけることができます。この関数は、返された行数とデータの各行の合計を計算することによって、指定された列データの平均を見つけることができます。構文「SELECT AVG (列名) FROM テーブル名」。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
mysql では、AVG() 関数を使用して平均を見つけることができます。
MySQL AVG() 関数は、一連の値または式の平均を計算するために使用される集計関数です。
AVG() 関数は、返された行の数とデータの各行の合計を計算することによって、指定された列データの平均を見つけることができます。
AVG() 関数の構文は次のとおりです。
SELECT AVG(column_name) FROM table_name;
DISTINCT 演算子を AVG() 関数に追加して、さまざまな値の平均を計算することもできます。たとえば、一連の値 1
、1
、2
、3
がある場合、AVG() 関数は次のようになります。 DISTINCT 演算は異なる値を返します。値の合計は (1 2 3)/3 = 2.00
となります。
デモ用にサンプル データベースの 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
関数によって返される平均値をフォーマットするために使用されることに注意してください。
句を SELECT
ステートメントに追加して、値のサブセットの平均を計算できます。たとえば、製品ライン Classic Cars
の製品の平均価格を計算するには、次のクエリを使用できます: <pre class="brush:sql;toolbar:false;">mysql> SELECT AVG(buyprice) &#39;Avarage Price&#39; FROM products;
+---------------+
| Avarage Price |
+---------------+
| 54.395182 |
+---------------+
1 row in set</pre>
上記のクエリ ステートメントを実行すると、次の結果が得られます-
SELECT AVG(buyprice) 'Avarage Classic Cars Price' FROM products WHERE productline = 'Classic Cars';
DISTINCT を使用した MySQL AVG() 関数
mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price' FROM products WHERE productline = 'Classic Cars'; +----------------------------+ | 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 関数を使用します。 ## 上記のクエリ ステートメントを実行すると、次の結果が得られます。
SELECT AVG(DISTINCT buyprice) FROM products;
MySQL AVG with HAVING 句
HAVING
サブAVG 関数の子 文はグループ平均の条件を設定します。たとえば、平均製品価格がmysql> SELECT AVG(DISTINCT buyprice) FROM products; +------------------------+ | AVG(DISTINCT buyprice) | +------------------------+ | 54.372870 | +------------------------+ 1 row in set
SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline;
MySQL AVG() 関数とサブクエリ
SQL ステートメント内で AVG() 関数を複数回使用して、一連の平均値の平均を計算できます。 。たとえば、製品ラインの平均購入価格は次のように計算できます。 mysql> SELECT productline, AVG(buyprice) 'Avarage Price' 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) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;実行方法-
製品ラインに基づいて平均購入価格を計算します。
外側のクエリは、サブクエリから返された製品ラインの平均購入価格を計算します。
id と
val
t という名前の新しいテーブルを作成します。 #val 列には NULL
値を含めることができます。 <pre class="brush:js;toolbar:false;">mysql> SELECT productline, AVG(buyprice) &#39;Avarage Price&#39; FROM products GROUP BY productline HAVING AVG(buyprice) > 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) 'Average Product' FROM ( SELECT AVG(buyprice) pl_avg FROM products GROUP BY productline ) avgs;
3 番目の 、AVG()
関数を使用して、val
列の値の平均を計算します。
mysql> SELECT AVG(pl_avg) 'Average Product' FROM ( SELECT AVG(buyprice) pl_avg FROM products GROUP BY productline ) avgs; +-----------------+ | Average Product | +-----------------+ | 51.1553314286 | +-----------------+ 1 row in setExecute 上記のクエリ ステートメントは次の結果を生成します -
CREATE TABLE IF NOT EXISTS t( id int auto_increment primary key, val int );NULL
値が計算に含まれていないため、このステートメントは予想どおり
2 を返します。 AVG関数。
制御フロー関数を使用した MySQL AVG
カラムの平均を計算し、単一のステートメントで同じカラムの平均を条件付きで計算するには、AVG 関数を使用できます。フロー関数 (
IF、
CASE
たとえば、
クラシックカー製品ラインの平均価格とすべての製品の平均価格の比率を計算するには、次のステートメントを使用します:
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 サイトの他の関連記事を参照してください。