2014-02-20 20 views
1

您好我有看起來如下表稱爲項目:MySQL的 - 獲得2個最常見的物品

items table 

itemname | itemprice 
--------------------- 
orange | 0.50 
pear  | 0.40 
apple | 0.40 
banana | 0.75 

我也有,能記錄每銷售一臺:

sales table 

date  | itemname | qty 
--------------------- 
17/12/13 | orange | 4 
22/12/13 | banana | 6 
23/12/13 | banana | 2 
29/12/13 | pear  | 3 
02/01/14 | orange | 2 
05/01/14 | pear  | 6 
05/01/14 | banana | 5 
06/01/14 | apple | 2 

我想什麼做得到2個最賣出的物品的物品名稱和價格。因此,查詢應該返回:

itemname | itemprice 
--------------------- 
banana | 0.70 
pear  | 0.40 

我可以得到2級最常見的物品,但是,這是錯誤的數量需要加以考慮,而不是在銷售表中ITEMNAME的頻率。

回答

3
SELECT i.itemname, i.itemprice 
FROM items i 
JOIN sales s ON i.itemname = s.itemname 
GROUP BY s.itemname 
ORDER BY SUM(s.qty) DESC 
LIMIT 2 

SQL Fiddle

如果你想成爲符合ANSI標準,改變GROUP BY

GROUP BY i.itemname, i.itemprice 
+0

我會強烈建議不要使用非ANSI'集團BY'語法 – Kermit

+0

@FreshPrinceOfSO好吧,你能解釋爲什麼嗎? –

+0

[爲什麼MySql允許「通過」查詢WITHOUT聚合函數?](http://stackoverflow.com/questions/1225144/why-does-mysql-allow-group-by-queries-without-aggregate-functions) – Kermit