Mysql 具有内部联接的计数操作
我在一个数据库中有两个表Mysql 具有内部联接的计数操作,mysql,Mysql,我在一个数据库中有两个表 Employee +----------+-------+-----------+-----------+------+-----------+ | Fname | Minit | Lname | Emp_ID | Sex | Dept_num | +----------+-------+-----------+-----------+------+-----------+ | John | S | Doe | 123
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出现在桌子上的作品中的次数。这将告诉我他们正在进行的项目的数量。为此,我尝试对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这样的网站上读了很多书,上面的很多例子都非常简单易懂,但对于初学者来说,这样的例子有点复杂
我的逻辑是,查询将遍历并计算每个Emp\u ID在works\u on中出现的次数。例如,ID 33344555在表中出现4次,因此员工33344555工作的项目数为4。我试图让它显示每个员工从事的项目数量,从中我可以选择所有项目的数量,正如我所说的是零。
COUNT
方法是实现这一点的最佳方法,还是使用DISTINCT
更合适。由于COUNT
返回符合指定条件的行数,我认为这是正确的操作。注意MySQL中的大小写敏感:
你有:
SELECT employee.Fname, employee.Minit, employee.Lname,
COUNT(works_on.Emp_ID) AS Num_projects
然后:
确保它是正确的
WHERE Num_projects=6;
如果将您的项目定义为Num_项目,where子句必须将其完全引用为Num_项目。。HAVING COUNT(*)=all projects查看您的项目列表中没有
num\u projects
列databases@Strawberry请查看重复链接不要担心重复问题。关键不是为了重复而打你,而是为了建立一个有用答案的网络。顺便说一下,检查一下这个sql小提琴。不,这不是解决办法。我没有足够的声誉来添加一个评论阴影,我同意这是更多的。显然这不是完整的解决方案,但我想就WHERE子句错误给出一些反馈。不鼓励这样做?您所写的不是未知列错误的原因。请检查正确答案的重复链接。顺便说一句,如果你的意思是作为一个评论,那么你应该避免把它作为一个答案发布。不鼓励将评论作为答案发布。
WHERE Num_projects=6;