我還在學習Oracle SQL,希望得到您的指導。通過SQL查詢來識別「最佳執行者」[?]
比方說,我們有MONTHLY_SALES_TOTALS表有3個字段:name
,region
,amount
。我們需要確定每個地區的最佳銷售人員。最佳意味着它們的數量等於該地區的最大數量。
CREATE TABLE montly_sales_totals
(
name varchar(20),
amount numeric(9),
region varchar(30)
);
INSERT ALL
INTO montly_sales_totals (name, amount, region) VALUES ('Peter', 55555, 'east')
INTO montly_sales_totals (name, amount, region) VALUES ('Susan', 55555, 'east')
INTO montly_sales_totals (name, amount, region) VALUES ('Mark', 1000000, 'south')
INTO montly_sales_totals (name, amount, region) VALUES ('Glenn', 50000, 'east')
INTO montly_sales_totals (name, amount, region) VALUES ('Paul', 500000, 'south')
SELECT * from dual;
可能的解決辦法:
SELECT m1.name, m1.region, m1.amount
FROM montly_sales_totals m1
JOIN
(SELECT MAX(amount) max_amount, region FROM montly_sales_totals GROUP BY region) m2
ON (m1.region = m2.region)
WHERE m1.amount = m2.max_amount
ORDER by 2,1;
SQL小提琴:http://sqlfiddle.com/#!4/6a2d8/6
現在我的問題:
- 效率如何這樣的查詢?
- 如何簡化和/或改進?
- 我無法使用頂部由於「最大」行的數量因地區而異。它可以用來代替另一個直接功能嗎?
但是在where子句中,您也需要包含該區域。 – Tim 2013-02-22 12:11:14
謝謝蒂姆,現在編輯。 – 2013-02-22 13:15:11