列出员工项目

时间:2016-10-09 05:32:28

标签: mysql sql

我制作了这些表格:

表1(职称)

JobTitleID |  JobName
2432          Software Developer
3462          Data Designer

表2(发展)

SoftwareID | StaffID | JobTitleID
3337         2363      2432
4636         2363      2432
6676         2436      2432
3432         2363      2432

表3(工作人员)

StaffID | FirstName | Last Name
2363      John        Smith
2436      Fraser      Morgan

表4(软件)

SoftwareID | SoftwareName
3337         Iphone
4636         Android
6676         Windows
3432         Playstation

我希望能够列出具有Staff工作的Software Developer表的名称,以及从最小到最大的每个开发软件项目的数量。

这样的事情:

FirstName | LastName| Project Count
John       Smith      3
Fraser     Morgan     1

其他信息:

  • JobTitleID是表格PK的{​​{1}}和表格JobTitle的{​​{1}}。
  • StaffID是表格PFK的{​​{1}}和表格Development的{​​{1}}。
  • SoftwareID是表格PK的{​​{1}}和表格Staff的{​​{1}}。
  • 三个表格:PFK,每个表格都强制要求强制连接到Development的许多关系。

我一直在尝试这样的事情:

PK

有没有办法可以实现针对我的问题的查询工作?

任何肝脏都会受到赞赏。

3 个答案:

答案 0 :(得分:1)

尝试使用以下内容:

SELECT DISTINCT Staff.FirstName, Staff.LastName, COUNT(Development.StaffID) AS numProjects
  FROM Staff
     INNER JOIN Development ON Staff.StaffID = Development.StaffID
        INNER JOIN JobTitle ON Development.JobTitleID = JobTitle.JobTitleID
           WHERE JobTitle.JobName = 'Software Developer'
              GROUP BY FirstName, LastName

输出:

FirstName - LastName - numProjects
  John    -  Smith   -     3
  Fraser  -  Morgan  -     1

答案 1 :(得分:1)

count(*)替换为count(distinct SoftwareID)应该这样做。并且选择后的不同是不必要的

答案 2 :(得分:1)

试试这个:

 SELECT FirstName, LastName,
 COUNT(*) AS numProjects 
 FROM Staff, Development, JobTitle
 WHERE JobName = 'Software Developer' 
 AND Staff.StaffID = Development.StaffID 
 AND Development.JobTitleID = JobTitle.JobTitleID 
 GROUP BY StaffID;