2014-02-19 94 views
0

想知道你是否可以幫我解決SQL問題。SQL 3 - 表查詢

表的例子,請ingore缺乏關係只是一個例子。

http://postimg.org/image/5imvjgl0t/

右鍵所以基本上我想所有的客戶ID具有一定的COUNTRYCODE相關的我可以通過對客戶表做一個簡單的查詢,但我然後需要找出客戶有多少形式有在訂單表中提交。

然後,我需要獲取倉庫的標題(每個國家代碼一個倉庫)以及與提交表單的倉庫相關聯的客戶數量。

所以總而言之,我需要從Customer表中獲取customerID的列表並計算它們在Order表中顯示的次數。根據訂單數量將它們分類到倉庫中。

最簡單的方法是什麼?

P.S.請忽略上面圖片中的任何數據類型/關係問題,這僅僅是一個例子。

+0

您可能想要提供一些示例數據和所需的結果,而不是鏈接到沒有人可以測試或驗證結果是否正確的圖像。 http://sqlfiddle.com/非常適合設置測試,但樣本數據和期望的結果應該成爲未來訪問者有類似問題的參考。 –

回答

0
SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    JOIN `Order` o USING (CustomerID) 
    GROUP BY w.siteid, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 

編輯

如果要包括客戶沒有任何訂單,則需要一個LEFT JOIN Customers表:

SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    LEFT JOIN `Order` o USING (CustomerID) 
    GROUP BY w.countrycode, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 

若要篩選,只有一個客戶:

SELECT w.title, c.CustomerID, COUNT(o.form_id) as cnt 
    FROM warehouse w 
    JOIN customer c USING (countrycode) 
    LEFT JOIN `Order` o USING (CustomerID) 
    WHERE c.CustomerId = 2 
    GROUP BY w.countrycode, c.CustomerID 
    ORDER BY w.title ASC, c.CustomerID 
+0

看起來不錯,我會在哪裏放置WHERE語句?我嘗試將它放入JOIN中,但沒有奏效。我有'WHERE o.CustomerID =「001」' – user3329963

+0

您可能需要轉義表順序的名稱,因爲它是一個保留字,否則它應該沒問題。 WHERE應該在JOINS之後並在GROUP BY之前 – fejese

+0

btw這裏是我用過的sqlfiddler實例:http://sqlfiddle.com/#!2/39509/7 – fejese