SQL 子查询大于/小于运算符
Posted
技术标签:
【中文标题】SQL 子查询大于/小于运算符【英文标题】:SQL Subquery greater than/less than operators 【发布时间】:2019-05-06 04:00:19 【问题描述】:我目前正在尝试通过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;
输出:
【问题讨论】:
【参考方案1】:您的子查询与外部查询没有关系。执行该子查询时,它只查询 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
【讨论】:
@Micheal,建议您使用ANSI JOIN syntax。 同意。如果我自己写这个,我会使用 INNER JOIN。我只是不想过多地改变 OP 的查询,以便专注于 HAVING 子句。 @Micheal Gunter,好的。明白了 @VenkataramanR:PSA:“迈克尔”不是一个名字。 :) (实际上,它是爱尔兰和苏格兰盖尔语中的一个名字,但 95% 以上的人会用这个名字拼写它。) 知道了。对不起我的错字。我用谷歌搜索找到了迈克尔·杰克逊、迈克尔·乔丹 :)【参考方案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;
然后您将使用子查询来过滤您想要的计数。
【讨论】:
同意。如果我自己写这个,我会使用 INNER JOIN。我只是不想过多地改变 OP 的查询,以便专注于 HAVING 子句。以上是关于SQL 子查询大于/小于运算符的主要内容,如果未能解决你的问题,请参考以下文章