私はまだOracleSQLを学習しているので、ガイダンスをお願いします。
たとえば、3つのフィールドを持つMONTHLY_SALES_TOTALSテーブルがあるとします: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を使用できませんでした。代わりに使用できたもう1つの直接的な機能ですか?