2010-12-21 103 views
3

我們有三個表,我們想查詢找出每個企業客戶的數量和每個業務記錄數MySQL的多個INNER JOIN

這三個表:

businessDetails 
------------------- 
businessDetails.ID 
businessDetails.name 

clientDetails 
------------------- 
clientDetails.ID 
clientDetails.businessDetailsID 

records 
------------------- 
records.ID 
records.businessDetailsID 

我們沒有任何問題可以同時從兩個表中選擇一個計數(businessDetails加上clientDetails或記錄)。例如

SELECT businessDetails.name AS businessName 
     , COUNT(clientDetails.businessDetailsID) AS totalClients 
FROM `businessDetails` 
INNER JOIN clientDetails 
     ON clientDetails.businessDetailsID = businessDetails.businessDetailsID 
GROUP BY 
businessDetails.name 
ORDER BY 
totalClients DESC 

該查詢爲我們提供了一個很好的結果如預期:

-------------------------------- 
businessName | totalClients 
-------------------------------- 
Initech   | 23 
Cylon Inc  | 148 
The Dude Ltd | 71 

我們正在運行到的問題是如何同時做兩個clientDetails和記錄的計數。我們嘗試下面的查詢,但發現它乘以totalClients的數量因某些原因:

SELECT businessDetails.name AS businessName 
     , COUNT(clientDetails.businessDetailsID) AS totalClients 
     , COUNT(records.businessDetailsID) AS totalRecords 
FROM `businessDetails` 
INNER JOIN clientDetails 
     ON clientDetails.businessDetailsID = businessDetails.businessDetailsID 
INNER JOIN records ON records.businessDetailsID = businessDetails.ID 
GROUP BY 
businessDetails.name 
ORDER BY 
totalClients DESC 

這將返回的結果是這樣的:

-------------------------------------------------------- 
businessName | totalClients | totalRecords 
-------------------------------------------------------- 
Initech   | 93    | 93 
Cylon Inc  | 398    | 398 
The Dude Ltd | 215    | 215 

我希望我們只是做一些簡單的錯誤。任何幫助將不勝感激。

回答

4

你需要的東西是這樣的:

SELECT 
    businessDetails.name AS businessName, 
    (SELECT count('x') FROM clientDetails WHERE clientDetails.businessDetailsID = businessDetails.businessDetailsID) as totalclients, 
    COUNT(records.businessDetailsID) AS totalRecords 
FROM 
    `businessDetails` 
    INNER JOIN records ON records.businessDetailsID = businessDetails.ID 
GROUP BY 
    businessDetails.name 
ORDER BY 
    totalClients DESC 
2

怎麼樣,如果你添加一個DISTINCT這樣的:

SELECT businessDetails.name AS businessName 
     , COUNT(distinct clientDetails.ID) AS totalClients 
     , COUNT(distinct records.ID) AS totalRecords 
FROM `businessDetails` 
INNER JOIN clientDetails 
     ON clientDetails.businessDetailsID = businessDetails.businessDetailsID 
INNER JOIN records ON records.businessDetailsID = businessDetails.ID 
GROUP BY 
businessDetails.name 
ORDER BY 
totalClients DESC 

這種方式,對於每個組businessDetails.name,你有不同的clientDetails和記錄的是「窗口」內的計數。

+2

我認爲這會給你兩個計數的'1'。如果兩個表都有自己的唯一ID,則可以使用`distinct clientdetails.clientid`和`distinct records.recordid`。 – GolezTrol 2010-12-21 19:26:04

+0

你是對的!感謝您指出監督。已經相應地編輯了答案。 – davek 2010-12-21 19:30:01

1

Count(Distinct [FieldName])作品MYSQL。試一試。

SELECT businessDetails.name AS businessName 
     , COUNT(Distinct clientDetails.businessDetailsID) AS totalClients 
     , COUNT(records.businessDetailsID) AS totalRecords 
FROM `businessDetails` 
INNER JOIN clientDetails 
     ON clientDetails.businessDetailsID = businessDetails.businessDetailsID 
INNER JOIN records ON records.businessDetailsID = businessDetails.ID 
GROUP BY 
businessDetails.name 
ORDER BY 
totalClients DESC