2016-09-09 57 views
0

我想寫一個最佳的SQL查詢這個問題,只是想知道是否有更好的解決方案,或者這將是最好的解決方案。請分享你的想法。謝謝。基於銷售的前十名產品列表

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

我可以想象的唯一另一種方式是使用交叉限制寫一個十進制,但我不確定它會更快。 – xQbert

+0

您是否還需要包含每個產品的排名(如上面用'ROW_NUMBER'做的那樣)? – redneb

回答

0

您的查詢會提供最佳性能。我試圖將它與下面的簡單查詢進行比較,並且這兩個查詢要麼採取相同的時間,要麼查詢表現更好。現在其他物理設計參數可能會影響實際環境。

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

我希望在Postgres裏以最快的速度爲:

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

不過,我希望這是隻比您的查詢速度更快。大部分工作是彙總每個產品的訂單,我認爲任何查詢都需要這樣做。