2016-09-09 6 views
0

この質問に対して最適なSQLクエリを作成したいと思います。より良いソリューションがあるかどうか、またはこれが最善の解決方法であるかどうか疑問に思っています。これについてあなたの考えをお伝えください。ありがとう。売上高に基づく上位10製品の一覧

SELECT * FROM 
(
SELECT product_id,ROW_NUMBER() OVER (ORDER BY SUM(quantity*price) DESC) AS rownum 
    FROM orders 
GROUP BY product_id 
) 
WHERE rownum <= 10; 
+0

十字を使用して私たちに書いたと想像できる唯一の他の方法は、「limit of 10」で適用されますが、もっと速くなるかどうかはわかりません。 – xQbert

+0

上記の 'ROW_NUMBER'のように、含まれる各製品のランキングも必要ですか? – redneb

答えて

0

あなたのお問い合わせは、最高のパフォーマンスをもたらします。私は単純なクエリの下でそれを比較しようとしました、そして、両方のクエリは同じ時間を取っているか、あなたのクエリはより良い実行しています。現在、他の物理的設計パラメータが実際の環境に影響を与える可能性があります。私はPostgresの最速があることを期待する

select top 10 product_id, SUM(quantity*price) from orders group by product_id 
order by SUM(quantity*price) desc 
1

SELECT product_id 
FROM orders 
GROUP BY product_id 
ORDER BY SUM(quantity*price) DESC 
LIMIT 10; 

しかし、私はこれがあなたのクエリよりもわずかに速くなることを期待します。努力の大部分は各製品の注文をまとめることであり、どのクエリでもそれを行う必要があると思います。

関連する問題