Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как узнать среднее значение в SQL
Для вычисления среднего значения в SQL используется агрегирующая функция AVG(). Это одна из основных статистических функций в SQL.
Базовый синтаксис
SELECT AVG(колонка) FROM таблица;
Пример:
SELECT AVG(salary) FROM employees;
Это вернет среднюю зарплату всех сотрудников.
AVG() с WHERE условием
Вычисление среднего для подмножества данных:
SELECT AVG(salary)
FROM employees
WHERE department = "IT";
AVG() с GROUP BY
Среднее значение для каждой группы:
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;
Результат:
department | avg_salary
IT | 75000
HR | 50000
Sales | 60000
AVG() с HAVING
Фильтрация групп по среднему значению:
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Вернет только отделы со средней зарплатой более 60000.
Округление результата
SELECT ROUND(AVG(salary), 2) as avg_salary
FROM employees;
Используется функция ROUND() для округления до 2 знаков.
AVG() с DISTINCT
Среднее уникальных значений:
SELECT AVG(DISTINCT salary) as avg_unique_salary
FROM employees;
Исключает дублирующиеся значения при расчете.
Несколько агрегирующих функций
SELECT
AVG(salary) as avg_salary,
MIN(salary) as min_salary,
MAX(salary) as max_salary,
COUNT(*) as employee_count
FROM employees;
AVG() в Java с JDBC
public class EmployeeDAO {
public double getAverageSalary() {
String sql = "SELECT AVG(salary) as avg_salary FROM employees";
try (Connection conn = getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
return rs.getDouble("avg_salary");
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
public double getAverageSalaryByDepartment(String department) {
String sql = "SELECT AVG(salary) FROM employees WHERE department = ?";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, department);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
return rs.getDouble(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
}
AVG() с JPAQuery (Spring Data)
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
@Query("SELECT AVG(e.salary) FROM Employee e")
Double getAverageSalary();
@Query("SELECT AVG(e.salary) FROM Employee e WHERE e.department = :dept")
Double getAverageSalaryByDepartment(@Param("dept") String department);
}
Частые ошибки
Ошибка 1: NULL значения
AVG() игнорирует NULL значения:
-- Правильно: NULL значения исключены
SELECT AVG(salary) FROM employees;
-- Для включения NULL как 0
SELECT AVG(COALESCE(salary, 0)) FROM employees;
Ошибка 2: Type mismatch
AVG() работает только с числовыми типами:
-- Неправильно
SELECT AVG(name) FROM employees; -- Ошибка!
-- Правильно
SELECT AVG(CAST(age AS DECIMAL)) FROM employees;
Производительность
Для больших таблиц добавляй индексы:
CREATE INDEX idx_department ON employees(department);
CREATE INDEX idx_salary ON employees(salary);