繁体   English   中英

SQL子查询大于/小于运算符

[英]SQL Subquery greater than/less than operators

我目前正在尝试通过GROUP BY函数简单地查询jobnamejobid 我使用COUNT(jobID) >2的子查询。 尽管如此,输出仍显示2的值。我知道我可以对此使用HAVING,但是我真的对为什么它不起作用感兴趣。

SELECT EmployeeType.jobName, COUNT(Employee.JobID) FROM Employee, EmployeeType WHERE (Employee.jobID = EmployeeType.jobID) AND (SELECT COUNT(Employee.jobID) FROM Employee) > 2 GROUP BY EmployeeType.JobName;

输出: 在此处输入图片说明

您的子查询与外部查询没有任何关系。 当执行该子查询时,它仅查询SELECT COUNT(Employee.jobID) FROM Employee来评估每个记录。 该查询的值大于2,因此将包含所有记录。

如果我了解您要执行的操作,则应该只使用HAVING子句。

SELECT EmployeeType.jobName, COUNT(Employee.jobID)
FROM Employee, EmployeeType
WHERE Employee.jobID = EmployeeType.jobID
GROUP BY EmployeeType.JobName
HAVING COUNT(Employee.jobID) > 2

不是迈克尔的答案是错误的,而是应该完全不鼓励在FROM子句中使用逗号。 因此,我提供了其他答案。

首先,在21世纪编写查询的正确方法是:

SELECT et.jobName, COUNT(*)
FROM Employee e JOIN
     EmployeeType et
     ON e.jobID = et.jobID
GROUP BY et.JobName
HAVING COUNT(e.jobID) > 2;

还请注意表别名的使用。

如果JobNameEmployeeType是唯一的 ,则可以使用相关的子查询:

select et.jobName,
       (select count(*)
        from employee e
        where e.jobId = et.jobId
       ) as cnt
from employeeType;

然后,您将使用子查询来过滤所需的计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM