2017-10-05 43 views
0

我有以下表Job descriptionCandidate
每個職位描述可能與n個候選人有關。候選人來自不同的來源(a,b,c d) - candidate.source從不同的表追加數據 - mysql

我希望有一個單一的查詢,列出我的JD IDS,與每個源對每個JD候選人數,如下圖所示:

JD id | candidate name | count of candidates - source a | count of candidates - source b | count of candidates - source | c.............. 
+0

是否得到源的計數,通過候選人的名字不行分組?此外,您希望在同一行中計算候選人和(隨機?)候選人姓名,這似乎很奇怪。如果您可以在平面文本中添加包含樣本數據的表結構以及包含樣本數據的預期結果集,這將有所幫助。如果您想添加您迄今爲止嘗試過的當前SQL,也可以使用http://sqlfiddle.com/。 – Nope

+0

候選人名稱是一個錯誤 - 遺憾的是混亂。 –

回答

2

嘗試使用查詢作爲模板:

select 
JobDescriptionName, 
SUM(ACount) CountOfCandidatesOfA , 
SUM(BCount) CountOfCandidatesOfB, 
SUM(CCount) CountOfCandidatesOfC , 
SUM(DCount) CountOfCandidatesOfD 
from 
(select JobDescriptionID, (CASE WHEN Source = 'a' THEN 1 ELSE 0 END) AS ACount, 
      (CASE WHEN Source = 'b' THEN 1 ELSE 0 END) AS BCount, 
      (CASE WHEN Source = 'c' THEN 1 ELSE 0 END) AS CCount, 
      (CASE WHEN Source = 'd' THEN 1 ELSE 0 END) AS DCount 
      from Candidate) AS DerivedCandidate 

inner join JobDescription ON JobDescription.JobDescriptionID = DerivedCandidate.JobDescriptionID group by JobDescriptionID; 
0
SELECT JD id, COUNT(Candidate), source 
FROM table1 
GROUP BY JD id,source 
+0

這不會爲輸出中的每個源生成一列。 – Nope

1

我知道已經有一個公認的答案,但在我學習更多關於SQL這裏的工作是運用case直接在初始選擇沒有子選擇另一種方式:

Select 
    jd.id, 
    jd.name, 
    sum(case when c.source = 'a' then 1 else 0 end) as sourceA, 
    sum(case when c.source = 'b' then 1 else 0 end) as sourceB, 
    sum(case when c.source = 'c' then 1 else 0 end) as sourceC, 
    sum(case when c.source = 'd' then 1 else 0 end) as sourceD 
from JobDescription as jd 
join Candidate as c on c.jobId = jd.id 
group by jd.id, jd.name 

SQL Fiddle Demo