2016-10-28 40 views
-2

我有興趣從銷售表中獲得前10名產品,但我想知道如何使用不帶任何限制條款的單個查詢來完成。以下是我所嘗試的如下。根據銷售額降序排列的前10名產品列表

sales(order_id, order_day, customer_id, product_id, quantity, price) 

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

LIMIT子句有什麼問題?查詢看起來很好看。 – sebkrueger

+0

我想這樣做,而不使用限制,也不想多次訪問表... – Teja

+0

好吧,但只是因爲我好奇,是否有一個特定的原因,以避免極限? – sebkrueger

回答

0

我已經嘗試了一些與「行計數器」和HAVING,但與HAVING,訂單首先會造成一些麻煩。

因此,這給我帶來了以下內容:

SET @rank=0; 
SELECT product_id FROM (
    SELECT product_id, @rank:[email protected]+1 AS rank 
    FROM sales 
    GROUP BY product_id 
    ORDER BY SUM(quantity*price) DESC) ranked 
WHERE rank<11 

1)在視線
2)和我'沒有限制我的權利,你只能訪問表的銷售一次。

-1

只需在您訂購之後使用OFFSET和FETCH。 它會爲你做這項工作。

+0

SELECT product_id FROM sales GROUP BY product_id ORDER BY SUM(數量*價格)DESC –

+0

偏移0行 僅取下10行; –

+0

在評論中將答案寫入自己的答案是毫無用處的,尤其是當這些評論與答案本身不同時。如果你打算寫一個答案,那就這樣做。請[編輯]答案並寫在那裏,它屬於哪裏。 –