本次的教學,主要分享MySQL在對資料表(Table)有了基本操作的相關知識後,後續開始針對聚合函數,在做更進階的討論,主要我們會談SUM、AVG、COUNT與GROUP BY的綜合操作,本教學是以Mysql 8.0為出發的教學,當然一些通用語法Mysql 8.0之前的版本也適用喔,所以大家不用擔心,只要一起做,相信你也可以了解MySQL 中的資料表操作是怎麼一回事。
Table of Contents
本教學的範例說明
延續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
你好,我是RD爸,希望透過我的紀錄,可以帶給你一些新的想法~ 專注於各式3C產品的開箱評測、程式相關技術及理財筆記。
email ►[email protected]