[英]SQL uses of "less than or equal to" <= vs. "not greater than" !> operators
[英]SQL Subquery greater than/less than operators
我目前正在尝试通过GROUP BY
函数简单地查询jobname
和jobid
。 我使用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;
还请注意表别名的使用。
如果JobName
在EmployeeType
是唯一的 ,则可以使用相关的子查询:
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.