2012-11-10 63 views
0

我試圖返回指定日期範圍內出售的物品類型的降序列表。MySQL加入表格並提取信息來檢查

我明白如何獲得項目類型的數量並對它們進行計數,但我堅持如何鏈接到其他表格。我會將我的工作代碼和我認爲需要完成的工作代碼放在一起,任何幫助都將不勝感激。

SELECT Item_Type, COUNT(*) as theAmount 
FROM myDB.Item 

//LINK order_ID to item 
//WHERE order_ID includes Item_Type 

//Link to session 
//Find Ses_Date that order was made 

GROUP BY Item_Type 
ORDER BY theAmount desc 
LIMIT 10 

我有三個表我需要從,顯示必要的字段抽取數據:

Item 
PK: Item_ID 
Row: Item_Type 
FK: Order_ID 

Order 
PK: Order_ID 
FK: Session_ID  

Session 
PK: Ses_ID 
Row: Ses_date 

回答

1
SELECT Item_Type, COUNT(*) as theAmount, Session_date 
FROM Item 
left outer join Order 
    on Item.Order_id = Order.Order_id 
left outer join Session 
    on Order.Session_id = Session.Session_id 
GROUP BY Item_Type 
ORDER BY theAmount desc 
LIMIT 10 

上面的查詢會給你的結果。

+0

然後我在什麼時間添加日期? – Wizard

+0

@Springfox避免來自最後一個選擇字段的','或逗號(在session_date之前和之後) – nawfal

+0

好吧,稍微擺弄一下我就可以或多或少地工作了。謝謝你的幫助。 :) – Wizard

0

你需要使用LEFT JOIN在這種情況下,因此,如果您有其他表中沒有匹配記錄,則Item_Type的值將爲零。

SELECT a.Item_Type, COUNT(c.Ses_ID) theAmount 
FROM Item a 
     LEFT JOIN `Order` b 
      ON a.Order_ID = b.Order_ID 
     LEFT JOIN `Session` c 
      ON b.Session_ID = c.Ses_ID 
GROUP BY a.Item_Type 
-- ORDER BY theAmount DESC 
-- LIMIT 10 
1
SELECT i.Item_Type, COUNT(i.Item_Type) as theAmount 
FROM  Item AS i 
JOIN  Order AS o ON o.order_ID = i.Order_ID 
JOIN  Session AS s ON s.Ses_ID = o.Session_ID 
WHERE s.Ses_date between @date1 AND @date2 
GROUP BY i.Item_Type 
ORDER BY theAmount DESC 
LIMIT 10 
+0

。*在計數參數中的含義是什麼? – Wizard

+0

@Springfox對不起,我編輯它。我只是用記號來指出count(*)必須從i(for items)中提取。相反,我們也可以使用表格i的常規列。我以這種方式編輯它 – nawfal