AVG
Синтаксис
AVG([DISTINCT] expr)
Описание
Возвращает среднее значение expr. Опция DISTINCT может быть использована для возвращения среднего значения различных значений expr. Значения NULL игнорируются. Это агрегатная функция, и её можно использовать с предложением GROUP BY.
AVG() возвращает NULL, если не было подходящих строк.
AVG() может быть использована как функция окна.
Примеры
CREATE TABLE sales (sales_value INT); INSERT INTO sales VALUES(10),(20),(20),(40); SELECT AVG(sales_value) FROM sales; +------------------+ | AVG(sales_value) | +------------------+ | 22.5000 | +------------------+ SELECT AVG(DISTINCT(sales_value)) FROM sales; +----------------------------+ | AVG(DISTINCT(sales_value)) | +----------------------------+ | 23.3333 | +----------------------------+
Обычно AVG() используется с предложением GROUP BY:
CREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);
INSERT INTO student VALUES
('Chun', 'SQL', 75), ('Chun', 'Tuning', 73),
('Esben', 'SQL', 43), ('Esben', 'Tuning', 31),
('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88),
('Tatiana', 'SQL', 87), ('Tatiana', 'Tuning', 83);
SELECT name, AVG(score) FROM student GROUP BY name;
+---------+------------+
| name | AVG(score) |
+---------+------------+
| Chun | 74.0000 |
| Esben | 37.0000 |
| Kaolin | 72.0000 |
| Tatiana | 85.0000 |
+---------+------------+
Следует быть осторожным, чтобы избежать распространённой ошибки — неверной группировки и возвращения несопоставимых данных:
SELECT name,test,AVG(score) FROM student; +------+------+------------+ | name | test | MIN(score) | +------+------+------------+ | Chun | SQL | 31 | +------+------+------------+
В качестве функции окна:
CREATE TABLE student_test (name CHAR(10), test CHAR(10), score TINYINT);
INSERT INTO student_test VALUES
('Chun', 'SQL', 75), ('Chun', 'Tuning', 73),
('Esben', 'SQL', 43), ('Esben', 'Tuning', 31),
('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88),
('Tatiana', 'SQL', 87), ('Tatiana', 'Tuning', 83);
SELECT name, test, score, AVG(score) OVER (PARTITION BY test)
AS average_by_test FROM student_test;
+---------+--------+-------+-----------------+
| name | test | score | average_by_test |
+---------+--------+-------+-----------------+
| Chun | SQL | 75 | 65.2500 |
| Chun | Tuning | 73 | 68.7500 |
| Esben | SQL | 43 | 65.2500 |
| Esben | Tuning | 31 | 68.7500 |
| Kaolin | SQL | 56 | 65.2500 |
| Kaolin | Tuning | 88 | 68.7500 |
| Tatiana | SQL | 87 | 65.2500 |
| Tatiana | Tuning | 83 | 68.7500 |
+---------+--------+-------+-----------------+
См. также
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/avg/