需求:根據表中數據,按「客戶名稱」(公司)分組,計算每組的「金額」總和。這是 SQL 聚合查詢最基礎也最常見的場景。
CREATE TABLE orders (
id INT PRIMARY KEY,
client_name VARCHAR(100), -- 客戶名稱/公司
amount DECIMAL(10,2) -- 金額
);
SELECT client_name, SUM(amount) AS total_amount
FROM orders
GROUP BY client_name;
GROUP BY client_name:將相同 client_name 的行聚合為一組。SUM(amount):對每組內的 amount 求和。AS total_amount:為結果列起別名,便於應用層讀取。-- 按公司和年份分組
SELECT client_name, YEAR(order_date) AS yr, SUM(amount) AS total
FROM orders
GROUP BY client_name, YEAR(order_date);
-- 只顯示總額大於 10000 的公司
SELECT client_name, SUM(amount) AS total
FROM orders
GROUP BY client_name
HAVING SUM(amount) > 10000;
SELECT id, client_name, SUM(amount) ... GROUP BY client_name,id 無法確定值,會報錯(MySQL ONLY_FULL_GROUP_BY 模式)或返回任意值。WHERE SUM(amount) > 10000 錯誤,聚合後篩選必須用 HAVING。client_name 上建立索引可加速分組。掌握 GROUP BY + 聚合函數 模式,即可解決 80% 以上的統計報表類 SQL 需求。