使用内部联接计数操作

时间:2017-03-06 22:19:47

标签: mysql

我在数据库中有两个表

Employee
+----------+-------+-----------+-----------+------+-----------+
|  Fname   | Minit |  Lname    |  Emp_ID   | Sex  | Dept_num  |
+----------+-------+-----------+-----------+------+-----------+
| John     | S     | Doe       | 123456789 | M    |         5 |
| Susan    | R     | Smith     | 333445555 | F    |         5 |
| Bob      | A     | Parker    | 999887777 | M    |         3 |
| Franklin | T     | Johnson   | 987654321 | M    |         4 |
| Debbie   | K     | Spencer   | 666884444 | F    |         3 |
| Stephen  | L     | English   | 453453453 | M    |         2 |
| Mary     | T     | Moore     | 987987987 | F    |         4 |
| James    | R     | Donaldson | 888665555 | M    |         1 |
+----------+-------+-----------+-----------+------+-----------+

Works_on
+-----------+-----------+
|  Emp_ID   | Proj_num  |
+-----------+-----------+
| 123456789 |         1 |
| 123456789 |         2 |
| 666884444 |         3 |
| 453453453 |         1 |
| 453453453 |         2 |
| 333445555 |         2 |
| 333445555 |         3 |
| 333445555 |        10 |
| 333445555 |        20 |
| 999887777 |        30 |
| 999887777 |        10 |
| 987987987 |        10 |
| 987987987 |        30 |
| 987654321 |        30 |
| 987654321 |        20 |
| 888665555 |        20 |
+-----------+-----------+

我一直在做一些基本操作的练习,看看他们在MySQL中做了什么,但有一个我坚持下去。假设我想知道每个项目的所有员工的姓名。由于没有员工在项目1,2,3,10,20和30上工作,因此查询应返回空结果。

我尝试做什么计算每个Emp_ID出现在works_on表中的次数。那会告诉我他们正在进行的项目数量。为此,我尝试在Emp_ID上使用COUNTS方法。我尝试运行的查询是这样的:

SELECT employee.Fname, employee.Minit, employee.Lname, 
COUNT(works_on.Emp_ID) AS Num_projects FROM works_on
INNER JOIN employee
ON works_on.emp_id=employee.emp_id
WHERE num_projects=6;

但是我收到错误,因为num_projects是WHERE子句中的未知列。我是SQL的新手,并且已经在w3schools.com这样的网站上阅读过很多内容,而且很多例子都很简单易懂,但对于初学者来说这样的事情有点复杂。 / p>

我的逻辑是查询将通过并计算每个Emp_ID在works_on中出现的次数。例如,ID 333445555在表中出现4次,因此员工333445555的项目数量为4.我试图让它显示每个员工的项目数量,从那里我可以选择号码这对所有人都有用,就像我说的那样是零。 COUNT方法是执行此操作的最佳方式,还是使用DISTINCT更合适。我认为,因为COUNT返回符合指定条件的行数,所以这将是正确的操作。

1 个答案:

答案 0 :(得分:-2)

注意MySQL中的区分大小写:

你有:

SELECT employee.Fname, employee.Minit, employee.Lname, 
COUNT(works_on.Emp_ID) AS Num_projects

然后:

WHERE num_projects=6;

确保它

WHERE Num_projects=6;

如果您将AS定义为Num_projects,则where子句必须完全引用它作为Num_projects