SQL AVG 函式

摘要:在本教程中,您將學習如何使用 SQL AVG 函式來計算一組值的平均值。

SQL AVG 函式簡介 #

AVG 函式是一個聚合函式,用於計算一個集合的平均值。

以下是 AVG 函式的語法

AVG([ALL|DISTINCT] expression)Code language: SQL (Structured Query Language) (sql)

如果您使用 ALL 關鍵字,AVG 函式會計算所有值的平均值,包括重複值。如果您使用 DISTINCT 關鍵字,AVG 函式會計算不同值的平均值。AVG 函式預設使用 ALL

假設您使用 AVG() 函式來計算集合 (1, 2, 3, 3, 4) 的平均值,AVG 函式將執行以下計算

(1+2+3+3+4)/5 = 2.6Code language: SQL (Structured Query Language) (sql)

然而,AVG(DISTINCT) 將計算不同值的平均值

(1+2+3+4)/4 = 2.5Code language: SQL (Structured Query Language) (sql)

SQL AVG 函式示例 #

我們將使用示例資料庫中的 employees 表來演示 AVG 函式的工作原理

employees_table

要計算所有員工的平均工資,您可以將 AVG 函式應用於 salary 列,如下所示

SELECT
  AVG(salary) average_salary
FROM
  employees;Code language: SQL (Structured Query Language) (sql)

試一試

    average_salary
-----------------------
 8060.0000000000000000Code language: CSS (css)

讓我們應用 DISTINCT 運算子看看結果是否會改變

SELECT
  ROUND(AVG(DISTINCT salary), 2) average_salary
FROM
  employees;Code language: SQL (Structured Query Language) (sql)

試一試

輸出

 average_salary
----------------
        7845.45Code language: CSS (css)

結果改變了,因為有些員工的薪水相同。

要將結果四捨五入到小數點後兩位,您可以使用 ROUND 函式,如下所示

SELECT 
  ROUND(AVG(DISTINCT salary), 2) average_salary
FROM
  employees;Code language: SQL (Structured Query Language) (sql)

試一試

 average_salary
----------------
        7845.45Code language: CSS (css)

要計算一個值子集的平均值,我們在 SELECT 語句中新增一個 WHERE 子句

例如,要計算部門 ID 為 5 的員工的平均工資,您可以使用以下查詢

SELECT
  ROUND(AVG(salary), 2) average_salary
FROM
  employees
WHERE
  department_id = 5;Code language: SQL (Structured Query Language) (sql)

試一試

 average_salary
----------------
        5885.71Code language: CSS (css)

以下語句返回職位 ID 為 6 的員工的平均工資

SELECT
  ROUND(AVG(salary), 2) average_salary
FROM
  employees
WHERE
  job_id = 6;Code language: SQL (Structured Query Language) (sql)

試一試

 average_salary
----------------
        7920.00
(1 row)Code language: CSS (css)

將 AVG 函式與 GROUP BY 子句結合使用的示例 #

要計算分組的平均值,我們將 AVG 函式與 GROUP BY 子句一起使用。

例如,以下語句返回各部門及其員工的平均工資

SELECT
  department_id,
  ROUND(AVG(salary), 2) average_salary
FROM
  employees
GROUP BY
  department_id
ORDER BY
  average_salary;Code language: SQL (Structured Query Language) (sql)

試一試

 department_id | average_salary
---------------+----------------
             3 |        4150.00
             1 |        4400.00
             6 |        5760.00
             5 |        5885.71
             4 |        6500.00
            10 |        8600.00
             2 |        9500.00
             8 |        9616.67
             7 |       10000.00
            11 |       10150.00
             9 |       19333.33

我們可以使用 inner join 子句將 employees 表與 departments 表連線起來,以獲取部門名稱資料

SELECT
  department_name,
  ROUND(AVG(salary), 2) average_salary
FROM
  employees e
  INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
  department_name
ORDER BY
  average_salary;Code language: SQL (Structured Query Language) (sql)

試一試

 department_name  | average_salary
------------------+----------------
 Purchasing       |        4150.00
 Administration   |        4400.00
 IT               |        5760.00
 Shipping         |        5885.71
 Human Resources  |        6500.00
 Finance          |        8600.00
 Marketing        |        9500.00
 Sales            |        9616.67
 Public Relations |       10000.00
 Accounting       |       10150.00
 Executive        |       19333.33Code language: PHP (php)

將 AVG 函式與 HAVING 子句結合使用的示例 #

要篩選分組,您可以在 HAVING 子句中使用 AVG 函式。

例如,以下語句檢索平均工資低於 5000 的部門

SELECT
  department_name,
  ROUND(AVG(salary), 2) average_salary
FROM
  employees e
  INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
  department_name
HAVING AVG(salary) < 5000
ORDER BY
  average_salary DESC;

試一試

 department_name | average_salary
-----------------+----------------
 Administration  |        4400.00
 Purchasing      |        4150.00

在子查詢中使用 SQL AVG 函式 #

您可以在單個 SQL 語句中多次應用 AVG 函式,以計算一組平均值的平均值。

例如,我們可以使用 AVG 函式計算每個部門員工的平均工資,然後再次應用 AVG 函式來計算各部門的平均工資

SELECT
  ROUND(AVG(average_salary_department), 2) average_salary
FROM
  (
    SELECT
      AVG(salary) average_salary_department
    FROM
      employees
    GROUP BY
      department_id
  ) t;Code language: SQL (Structured Query Language) (sql)

試一試

 average_salary
----------------
        8535.97Code language: CSS (css)

查詢工作原理:

  • 子查詢返回每個部門員工的平均工資集合。
  • 外部查詢返回各部門的平均工資。

摘要 #

  • 使用 AVG 函式計算一個集合的平均值。
  • AVG 函式與 GROUP BY 子句結合使用,以計算每個分組的平均值。

資料庫 #

本教程是否有幫助?
© .