在MySQL中,你可以使用WITH RECURSIVE
子句進(jìn)行遞歸查詢,這對于解決需要多步驟計算的問題非常有用。遞歸查詢通常用于處理樹形結(jié)構(gòu)的數(shù)據(jù),如組織結(jié)構(gòu)、層級菜單等。
下面是一個使用WITH RECURSIVE
進(jìn)行數(shù)據(jù)聚合的示例。假設(shè)我們有一個銷售數(shù)據(jù)表sales
,其中包含每個銷售人員的銷售業(yè)績,以及他們的上級銷售人員(如果他們是多層次的銷售團(tuán)隊的一部分)。
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)
);
現(xiàn)在,假設(shè)我們想要計算每個銷售人員的總銷售額,以及整個銷售團(tuán)隊的總銷售額。我們可以使用以下遞歸查詢來實現(xiàn)這一點:
WITH RECURSIVE sales_hierarchy AS (
-- 基礎(chǔ)查詢:選擇每個銷售人員的銷售業(yè)績,并將上級銷售人員的ID與之關(guān)聯(lián)
SELECT
employee_name,
sales_amount,
manager_id,
sales_amount AS total_sales
FROM
sales
UNION ALL
-- 遞歸查詢:將當(dāng)前銷售人員的銷售業(yè)績與其所有下屬的銷售業(yè)績相加
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
)
-- 選擇最終結(jié)果
SELECT
employee_name,
total_sales
FROM
sales_hierarchy
ORDER BY
total_sales DESC;
注意:
total_sales
字段中。employee_name
和total_sales
字段,并按總銷售額降序排列。