2014-01-14 59 views
0

我真的想自己解決這個問題,但我完全陷入困境。根據數量和發生次數返回最高x最常見

我需要返回前5個最頻繁訂購的商品和他們的總價格:

+-----+---+-----+ 
|name |qty|price| 
+-----+---+-----+ 
|item1|1 |£5 | 
+-----+---+-----+ 
|item2|4 |£1 | 
+-----+---+-----+ 
|item1|1 |£5 | 
+-----+---+-----+ 
|item2|5 |£1 | 
+-----+---+-----+ 
|item1|1 |£5 | 
+-----+---+-----+ 
|item1|1 |£5 | 
+-----+---+-----+ 

的邏輯顯然是集團的基礎上name 頻率的項目,然後乘的qty總和與price

結果表應該是這個樣子:

+-----+---+-----+-----+ 
|name |qty|price|total| 
+-----+---+-----+-----+ 
|item1|4 |£5 |£20 | 
+-----+---+-----+-----+ 
|item2|9 |£1 |£9 | 
+-----+---+-----+-----+ 

據我所知是SELECT name, qty, price, (SUM(qty) * price) AS "total" ORDER BY qty DESC LIMIT 5

但我知道這是錯的。請幫忙!

謝謝

回答

2

你是非常接近。你需要一個group by,不過,並把產品sum()

SELECT name, count(*) as NumOrders, 
     SUM(qty) as qty, 
     SUM(qty * price)/SUM(qty) as average_price, 
     SUM(qty* price) AS "total" 
FROM t 
GROUP BY name 
ORDER BY sum(qty) DESC 
LIMIT 5; 

編輯:

如果你知道價格是所有行一樣,你可以簡化這:

SELECT name, count(*) as NumOrders, 
     SUM(qty) as qty, 
     price as average_price, 
     SUM(qty) * price AS "total" 
FROM t 
GROUP BY name, price 
ORDER BY sum(qty) DESC 
LIMIT 5; 
+0

謝謝,這是我所需要的,但是有一個問題我忘了補充! –

+0

啊,直接改變了我的問題來問這個問題。這是歡呼的夥伴! –