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
을 반환합니다. 1
、1
、2
、3
,具有DISTINCT操作的AVG()函数将返回不同值的和,即:(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;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(buyprice) 'Avarage Price' FROM products; +---------------+ | Avarage Price | +---------------+ | 54.395182 | +---------------+ 1 row in set
请注意,FORMAT
函数用于格式化AVG
函数返回的平均值。
您可以向SELECT
语句添加一个WHERE
子句来计算子集值的平均值。 例如,要计算产品线为Classic Cars
的产品的平均价格,您可以使用以下查询:
SELECT AVG(buyprice) 'Avarage Classic Cars Price' FROM products WHERE productline = 'Classic Cars';
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price' FROM products WHERE productline = 'Classic Cars'; +----------------------------+ | Avarage Classic Cars Price | +----------------------------+ | 64.446316 | +----------------------------+ 1 row in set
有些产品价格相同,可以使用以下查询来检查它:
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
可以使用AVG()函数通过添加DISTINCT
运算符来计算不同价格的平均值,如下所示:
SELECT AVG(DISTINCT buyprice) FROM products;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(DISTINCT buyprice) FROM products; +------------------------+ | AVG(DISTINCT buyprice) | +------------------------+ | 54.372870 | +------------------------+ 1 row in set
结果与使用DISTINCT
操作符的平均价格略有不同。
我们经常使用AVG函数与GROUP BY
子句一起计算表中每组行的平均值。
例如,要计算每个产品线的产品的平均价格,您将使用带有GROUP BY
子句的AVG函数,如下查询语句:
SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline;
执行上面查询语句,得到以下结果 -
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
您可以使用AVG函数中的HAVING
子句中为分组的平均值设置条件。 例如,如果要仅选择产品平均价格大于50
的产品线,则可以使用以下查询:
SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
执行上面查询语句,得到以下结果 -
mysql> SELECT productline, AVG(buyprice) 'Avarage Price' 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
您可以在SQL语句中多次使用AVG()函数来计算一组平均值的平均值。 例如,可以计算产品线平均购买价格的平均买价如下:
SELECT AVG(pl_avg) 'Average Product' FROM ( SELECT AVG(buyprice) pl_avg FROM products GROUP BY productline ) avgs;
执行上面查询语句,得到以下结果 -
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 set
怎么运行的 -
AVG()函数忽略计算中的NULL
值,请参阅以下示例:
首先,创建一个名为t
的新表,其中有两列id
和val
,val
列可以包含NULL
值。
CREATE TABLE IF NOT EXISTS t( id int auto_increment primary key, val int );
其次,在t
表中插入一些行,包括NULL
值。
INSERT INTO t(val) VALUES(1),(2),(nulL),(3);
第三,使用AVG()
函数计算val
列中值的平均值:
SELECT AVG(val) FROM t;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(val) FROM t; +----------+ | AVG(val) | +----------+ | 2.0000 | +----------+ 1 row in set
该语句按预期返回2
,因为在AVG函数的计算中不包括NULL
值。
要计算列的平均值,并在单个语句中有条件地计算相同列的平均值,可以使用具有控制流函数(如IF
,CASE
,IFNULL
,NULLIF
等)的AVG函数。
例如,要计算Classic Cars
产品线的平均价格与所有产品的平均价格的比例,请使用以下声明:
SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products' FROM products;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products' FROM products; +------------------------+ | Classic Cars/ Products | +------------------------+ | 1.1847798580 | +------------------------+ 1 row in set
如果产品线是Classic Cars
,则IF(productline='Classic Cars',buyprice,NULL)
表达式返回价格,否则返回NULL
products
테이블을 사용하겠습니다. 아래 그림은 products입니다. 코드> 테이블의 구조-🎜rrreee🎜 <code>products
테이블에 있는 모든 제품의 평균 가격을 계산하려면 다음 쿼리와 같이 AVG 함수를 사용할 수 있습니다. 🎜rrreee🎜 위 쿼리문을 실행하면 다음과 같은 결과가 나옵니다-🎜rrreee🎜 FORMAT
함수는 AVG
함수에서 반환되는 평균값의 형식을 지정하는 데 사용됩니다. 🎜🎜SELECT
문에 WHERE
절을 추가하여 값 하위 집합의 평균을 계산할 수 있습니다. 예를 들어 Classic Cars
제품군이 포함된 제품의 평균 가격을 계산하려면 다음 쿼리를 사용할 수 있습니다. 🎜rrreee🎜위 쿼리 문을 실행하면 다음 결과를 얻을 수 있습니다.-🎜rrreeeDISTINCT
연산자를 추가하여 다양한 가격의 평균을 계산할 수 있습니다. 🎜rrreee🎜위 쿼리를 실행합니다. 명령문을 실행하고 다음 결과를 얻습니다. -🎜rrreee🎜결과 및 사용법DISTINCT 연산자의 평균 가격은 약간 다릅니다. 🎜GROUP BY
절이 있는 AVG 함수를 자주 사용합니다. 테이블에 있는 각 행 집합의 평균입니다. 🎜🎜예를 들어 각 제품군의 제품 평균 가격을 계산하려면 다음 쿼리와 같이 GROUP BY
절과 함께 AVG 함수를 사용합니다. 🎜rrreee🎜위 쿼리를 실행하고 다음 결과를 얻습니다. - 🎜rrreeeHAVING
절을 사용할 수 있습니다. 기능 에서 그룹 평균에 대한 조건을 설정합니다. 예를 들어, 평균 제품 가격이 50
보다 큰 제품군만 선택하려는 경우 다음 쿼리를 사용할 수 있습니다. 🎜rrreee🎜위 쿼리 문을 실행하면 다음 결과가 나타납니다.🎜rrreee NULL을 무시합니다 code> 값에 대해 다음 예를 참조하세요. 🎜🎜<em>먼저</em>, <code>val과 마찬가지로 <code>id
두 개의 열이 있는 t
라는 새 테이블을 만듭니다. , val
열에는 NULL
값이 포함될 수 있습니다. 🎜rrreee🎜두 번째로 NULL
값을 포함하여 t
테이블에 일부 행을 삽입합니다. 🎜rrreee🎜세 번째, AVG()
함수를 사용하여 val
열에 있는 값의 평균값을 계산합니다. 🎜rrreee🎜 위 쿼리 문을 실행하면 다음과 같은 결과가 나옵니다. - 🎜rrreee🎜이 문은 AVG 함수 계산에 NULL
값이 포함되지 않으므로 예상대로 2
를 반환합니다. 🎜IF
, CASE
, IFNULL
, NULLIF
등)와 함께 AVG 함수를 사용합니다. 🎜🎜예를 들어 Classic Cars
제품군의 평균 가격과 모든 제품의 평균 가격의 비율을 계산하려면 다음 명령문을 사용하세요. 🎜rrreee🎜위 쿼리 문을 실행하여 다음을 얻습니다. 다음 결과-🎜rrreee🎜제품 라인이 Classic Cars
인 경우 IF(productline='Classic Cars',buyprice,NULL)
표현식은 가격을 반환합니다. 그렇지 않으면 NULL
을 반환합니다. 🎜AVG 함수는 계산 시 NULL
值,所以AVG(IF(productline ='Classic Cars',buyprice,NULL))
表达式只计算产品线是Classic Cars
제품의 평균 가격을 무시하기 때문입니다.
【관련 추천: mysql 비디오 튜토리얼】
위 내용은 MySQL에서 평균값을 찾는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!