《MYSQL 8 教學–DAY03–聚合函數-談SUM、AVG、COUNT與GROUP BY》操作分享 | 學習筆記

Telegram share !

本次的教學,主要分享MySQL在對資料表(Table)有了基本操作的相關知識後,後續開始針對聚合函數,在做更進階的討論,主要我們會談SUM、AVG、COUNT與GROUP BY的綜合操作,本教學是以Mysql 8.0為出發的教學,當然一些通用語法Mysql 8.0之前的版本也適用喔,所以大家不用擔心,只要一起做,相信你也可以了解MySQL 中的資料表操作是怎麼一回事。

本教學的範例說明

延續Day02教學以電子商務線上購物所會用的相關資料表為基礎,後續會再做相關的延伸

資料庫名稱:rdpapashop

CREATE DATABASE `rdpapashop` /*!40100 COLLATE 'utf8mb4_unicode_ci' */

資料表名稱:employees員工資料表

建立資料表(employees)

use `rdpapashop`;
CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    department VARCHAR(50),
    salary DECIMAL(10, 2),
    age INT,
    hire_date DATE
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
語法解析
use使用資料庫: use <資料庫名稱>;
CREATE TABLE 資料表名稱 (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
PRIMARY KEY (id) USING BTREE =>指定欄位id為主索引鍵,使用BTREE建立資料庫索引。
ENGINE=InnoDB 使用預設的資料庫引擎InnoDB 
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 使用utf8mb4當作字元編碼

建立範例資料(employees)

INSERT INTO employees (first_name, last_name, department, salary, age, hire_date)
VALUES
    ('John', 'Doe', 'HR', 55000.00, 30, '2020-01-15'),
    ('Jane', 'Smith', 'Finance', 60000.50, 28, '2019-11-20'),
    ('Michael', 'Johnson', 'Engineering', 75000.75, 35, '2018-05-10'),
    ('Emily', 'Brown', 'Sales', 50000.25, 27, '2021-02-18'),
    ('William', 'Jones', 'HR', 60000.00, 29, '2017-09-03'),
    ('Olivia', 'Davis', 'Engineering', 70000.50, 32, '2016-12-22'),
    ('James', 'Wilson', 'Finance', 62000.75, 31, '2020-08-14'),
    ('Sophia', 'Taylor', 'Sales', 51000.25, 26, '2019-03-25'),
    ('Benjamin', 'Anderson', 'Engineering', 77000.00, 33, '2015-06-12'),
    ('Emma', 'Martinez', 'HR', 58000.50, 28, '2022-04-30'),
    ('Mason', 'Hernandez', 'Sales', 52000.75, 27, '2018-10-05'),
    ('Ava', 'Lopez', 'Finance', 61000.25, 30, '2020-07-02'),
    ('Liam', 'Garcia', 'Engineering', 76000.00, 34, '2017-02-11'),
    ('Isabella', 'Rodriguez', 'HR', 59000.50, 29, '2019-09-19'),
    ('Noah', 'Martinez', 'Sales', 53000.75, 26, '2021-01-08'),
    ('Oliver', 'Gonzalez', 'Engineering', 78000.25, 35, '2016-04-17'),
    ('Sophia', 'Hernandez', 'Finance', 63000.50, 31, '2020-11-27'),
    ('Mia', 'Smith', 'HR', 60000.00, 28, '2018-08-07'),
    ('Liam', 'Anderson', 'Engineering', 79000.75, 36, '2017-03-15'),
    ('Ava', 'Johnson', 'Sales', 54000.25, 27, '2019-06-28'),
    ('Lucas', 'Brown', 'Finance', 64000.00, 32, '2021-05-13'),
    ('Harper', 'Garcia', 'Engineering', 80000.50, 37, '2016-09-22'),
    ('Evelyn', 'Davis', 'HR', 61000.75, 29, '2018-01-04'),
    ('Logan', 'Taylor', 'Sales', 55000.25, 28, '2020-10-09'),
    ('Avery', 'Martinez', 'Finance', 65000.00, 33, '2019-04-16'),
    ('Jackson', 'Wilson', 'Engineering', 81000.50, 38, '2017-08-25'),
    ('Penelope', 'Lopez', 'HR', 62000.75, 30, '2018-05-03'),
    ('Sebastian', 'Hernandez', 'Sales', 56000.25, 29, '2020-02-12'),
    ('Luna', 'Gonzalez', 'Finance', 66000.00, 34, '2019-11-21'),
    ('Mateo', 'Johnson', 'Engineering', 82000.50, 39, '2017-12-30'),
    ('Grace', 'Smith', 'HR', 63000.75, 31, '2018-03-08');

RDPAPA Tip

安裝好以上範例資料後,我們就可以開始我們的教學練習,本範例資料為employees的資料表,包含員工的基本資訊,如姓名、部門、薪水等欄位

操作實例

計算員工數量和平均薪水-AVG

SELECT 
		department, COUNT(*) AS employee_count, AVG(salary) AS avg_salary
FROM 
		employees
GROUP BY 
		department;

#這個查詢將根據部門分組,並使用COUNT函數計算每個部門的員工數量,使用AVG函數計算每個部門的平均薪水。

=>查詢結果

找到每個部門中最高薪水的員工-MAX

SELECT 
		department, MAX(salary) AS max_salary
FROM 
		employees
GROUP BY 
		department;

#這個查詢將根據部門分組,並使用MAX函數找到每個部門中的最高薪水。

=>查詢結果

計算每個部門中薪水高於平均薪水的員工數

SELECT 
		department, COUNT(*) AS above_avg_salary_count
FROM 
		employees
WHERE 
		salary > (SELECT AVG(salary) FROM employees)
GROUP BY 
		department;

#這個查詢首先計算整個公司的平均薪水,然後找到薪水高於平均薪水的員工數,並根據部門分組。

=>查詢結果

找到每個部門中最年輕的員工年齡-MIN

SELECT 
		department, MIN(age) AS youngest_age
FROM 
		employees
GROUP BY 
		department;

#這個查詢將根據部門分組,並使用MIN函數找到每個部門中最年輕的員工年齡。

=>查詢結果

計算每個部門的總薪水總額-SUM

SELECT 
		department, SUM(salary) AS total_salary
FROM 
		employees
GROUP BY 
		department;

#這個查詢將根據部門分組,然後使用SUM函數計算每個部門的員工
#薪水總額,並將結果命名為"total_salary"。這樣,你可以得到
#每個部門的總薪水數據。如果需要,你可以將這個查詢與之前提供
#的INSERT INTO語句一起使用,以便插入包含SUM函數的範例數據。

=>查詢結果

Reference