我仍在学习 Oracle 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
现在我的问题:
- 这样的查询效率如何?
- 如何/应该如何简化和/或改进它?
- 我无法使用Top,因为“最大”行数因地区而异。它是我可以使用的另一个直接功能吗?