2017-02-15 56 views
0

在我的數據庫,我有以下表格:計數出現在多對多

Person (
id, 
name, 
agentId 
) 

Agent (
id, 
title 
) 

Agency (
id, 
name 
) 

AgentAgency (
id, 
agentId, 
agencyId 
) 

我需要查詢,將獲得有關個人的所有信息 - >代理有額外屬性numberOfAgencies,將顯示每個代理的機構數量,並且我需要顯示一個更多的屬性agencyName,它會顯示我第一個或唯一代理的用戶名(我需要它的情況下代理只有一個代理)的名稱。

我試過這樣的事情,但沒有任何成功。

SELECT *, COUNT (aa.agentId) as numberOfAgencies 
FROM agentAgencies as aa 
LEFT JOIN agent as a ON a.id = aa.agentId 
LEFT JOIN agency as ag ON aa.agencyId= ag.id 
LEFT JOIN person as p ON p.id = ag.personId 
GROUP BY ag.id, aa.id, p.id, a.id 

例如,我希望迴應是這樣的: PERSONNAME約翰,AgencyName酷局,numberOfAgencies 4

+2

顯示你嘗試過什麼。最好與所有必要的CREATE TABLE語句一起,以便有人可以在http://sqlfiddle.com/上覆制粘貼並立即開始工作。還要定義「沒有任何成功」的意思。另外,它是什麼? mysql或postgresql?選一個***。 –

+0

MySQL或Postgres? –

+0

你確定AgentAgency有正確的列嗎?通過它的命名,我認爲它是代理和代理之間的連接表。 column agentId代替personId嗎? – Ehz

回答

2
SELECT 
MAX(p.Name) PersonName, 
count(a.id) NoOfAgencies, 
MAX(a.name) AgencyName 
FROM persons p 
LEFT OUTER JOIN agent g ON g.Id=p.agentId 
LEFT OUTER JOIN AgentAgency aa ON aa.agentId = g.Id 
LEFT OUTER JOIN Agency a on a.id = aa.agencyId 
GROUP BY a.Id 
+0

謝謝Andy,我將運行此查詢並檢查它是否有效 –

+2

如果代理沒有代理,count(*)將返回1。 –

+0

這太棒了。我正在考慮做子查詢,它只返回a.id = aa.id的計數,但不知道你可以在字符串上做一個MAX –