在MySQL中,你可以使用WITH RECURSIVE
子句進行遞歸查詢,這對于解決需要多步驟計算的問題非常有用。遞歸查詢通常用于處理樹形結構的數據,如組織結構、層級菜單等。
下面是一個使用WITH RECURSIVE
進行數據聚合的示例。假設我們有一個銷售數據表sales
,其中包含每個銷售人員的銷售業績,以及他們的上級銷售人員(如果他們是多層次的銷售團隊的一部分)。
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_name VARCHAR(255),
sales_amount DECIMAL(10, 2),
manager_id INT, -- 指向同一表中上級銷售人員的ID
FOREIGN KEY (manager_id) REFERENCES sales(id)
);
現在,假設我們想要計算每個銷售人員的總銷售額,以及整個銷售團隊的總銷售額。我們可以使用以下遞歸查詢來實現這一點:
WITH RECURSIVE sales_hierarchy AS (
-- 基礎查詢:選擇每個銷售人員的銷售業績,并將上級銷售人員的ID與之關聯
SELECT
employee_name,
sales_amount,
manager_id,
sales_amount AS total_sales
FROM
sales
UNION ALL
-- 遞歸查詢:將當前銷售人員的銷售業績與其所有下屬的銷售業績相加
SELECT
s.employee_name,
s.sales_amount,
s.manager_id,
sh.total_sales + s.sales_amount AS total_sales
FROM
sales s
JOIN sales_hierarchy sh ON s.manager_id = sh.employee_name
)
-- 選擇最終結果
SELECT
employee_name,
total_sales
FROM
sales_hierarchy
ORDER BY
total_sales DESC;
注意:
total_sales
字段中。employee_name
和total_sales
字段,并按總銷售額降序排列。