2010-04-29 239 views
2

我有以下各表數據庫:SQL查詢來獲取最

Employee (EmpID, FirstName, LastName, RegionID) 
EmployeeSkills(EmpID, SkillID) [this is a linking table for the M:N relationship between Employees and skills] 
Skills(SkillID, Description) 

我需要列出,大多數員工有技巧的名字。我試過做一個max(count(skillID)),sqlserver表示你不能在一個聚合函數上做一個聚合函數。任何其他想法?

預先感謝您!

回答

2

試試這個:

SELECT TOP 1 
    SkillID, s.Description,COUNT(SkillID) AS CountOf 
    FROM EmployeeSkills e 
     INNER JOIN Skills s ON e.SkillID=s.SkillID 
    GROUP BY SkillID, s.Description 
    ORDER BY 3 DESC 
2

這將返回頂部SkillsId它出現了多少次:

SELECT TOP 1 SkillID, COUNT(SkillID) 
FROM EmployeeSkills 
GROUP BY SkillID 
ORDER BY COUNT(SkillID) DESC 
+0

謝謝,但我不需要知道每個人出現多少次 - 我需要返回大多數員工擁有的技能。 – chama 2010-04-29 18:49:29

+0

@chama - 答案已更新。 – Oded 2010-04-29 18:51:11

0
SELECT s.Description, COUNT(*) from EmployeeSkills es 
    INNER JOIN Skills s on s.SkillID = es.SkillID 
GROUP BY s.Description ORDER BY COUNT(*) DESC 

這會給你的技能的描述,多少員工擁有它。

+1

你可能想要的東西更多類似這樣的 SELECT s.Description,從EmployeeSkills ES COUNT(*) INNER上s.SkillID = es.SkillID 羣參加技能■通過s.Description ORDER BY COUNT(*)DESC – Jay 2010-04-29 18:53:03

+0

他沒有提到訂購,但你是對的,我編輯。 – 2010-04-29 19:07:43

0

下面的查詢將返回技能ID是使用的最:

SELECT TOP 1 SkillID, COUNT(SkillID) 
    FROM EmployeeSkills 
GROUP BY SkillID 
ORDER BY COUNT(SkillID) DESC 

然後,您可以用它來獲取技能的名稱。

+0

@Justin - 問題是針對SQL Server,而不是MySQL。 – Oded 2010-04-29 18:53:40