MySQL 是一款優秀的關系型數據庫,擁有強大的聚合功能。在實際應用中,經常需要對數據進行多次聚合,以實現業務需求。本文將簡要介紹 MySQL 多次聚合的實現方法。
假設有一張學生成績表,包含學生姓名和科目成績兩列:
CREATE TABLE scores ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, subject VARCHAR(20) NOT NULL, score INT NOT NULL );
現在的需求是,對每個學生姓名,查詢其總分數和平均分數。可以使用如下 SQL 語句實現:
SELECT name, SUM(score) AS total_score, AVG(score) AS avg_score FROM scores GROUP BY name;
聚合函數SUM
和AVG
分別計算每個學生的總分數和平均分數。
接下來的需求是,將每個學生的總分數和平均分數按照科目分別計算。可以使用如下 SQL 語句實現:
SELECT name, subject, SUM(score) AS total_score, AVG(score) AS avg_score FROM scores GROUP BY name, subject;
這里將GROUP BY
中的列擴展為兩列,即學生姓名和科目,以實現按照科目分別計算總分數和平均分數。
最后的需求是,按照每個科目,查詢總分數和平均分數最高的學生姓名和對應的成績。可以使用如下 SQL 語句實現:
SELECT subject, name, MAX(total_score) AS max_total_score, MAX(avg_score) AS max_avg_score FROM ( SELECT subject, name, SUM(score) AS total_score, AVG(score) AS avg_score FROM scores GROUP BY subject, name ) t GROUP BY subject;
這里先對學生姓名和科目進行分組,計算每個學生在每個科目下的總分數和平均分數,然后再對每個科目分組,查詢總分數和平均分數最高的學生。
綜上所述,MySQL 多次聚合的實現方法包括:GROUP BY
子句和子查詢。需要根據具體業務需求進行合理選擇和使用。