好的,我无法想象我有这个
select job "Some job", Count(a.bossID) "Number Of bosses"
from boss a, places b, place_boss ba
where ba.bossid = a.bossid and ba.placeid = b.placeid
and Count(a.bossID)>1
group by job;
我在这里不允许使用群组功能我需要确保如果作业有一个老板则不会显示。
任何想法我在这里弄乱了什么?
答案 0 :(得分:7)
您需要使用having
。 Where
子句不能包含聚合。另外,我已将其更改为使用显式JOIN
语法,因为这样(IMO)更清晰,并且不太可能导致无意的笛卡尔连接。
select job "Some job",
Count(a.bossID) "Number Of bosses"
from boss a
join place_boss ba
on ba.bossid = a.bossid
join places b
on ba.placeid = b.placeid
group by job
having Count(a.bossID) > 1;
答案 1 :(得分:3)
where
子句在行级别应用,字面意思是“该行应该包含在结果集中”。在做出决定时,count()
函数无法完成其工作,因为尚未计算所有行。
那是having
条款发挥作用的地方。它们与where
子句完全相同,但在聚合函数完成工作后,在结果集发送到客户端之前立即应用。
从技术上讲,做
SELECT * FROM table HAVING somefield='a'
SELECT * FROM table WHERE somefield='a'
是相同的,除了having子句将需要在服务器方面做更多的工作,因为所有行都被提取,然后被过滤,而不是在获取之前被过滤。
答案 2 :(得分:1)
select
job "Some job",
Count(a.bossID) "Number Of bosses"
from
boss a, places b, place_boss ba
where
ba.bossid = a.bossid and ba.placeid = b.placeid
group by job
having Count(a.bossID) > 1;
答案 3 :(得分:1)
我会尝试使用HAVING子句:
select job "Some job", Count(a.bossID) "Number Of bosses"
from boss a, places b, place_boss ba
where ba.bossid = a.bossid
group by job
having Count(a.bossID)>1
答案 4 :(得分:0)
别介意它应该
select job "Some job", Count(a.bossID) "Number Of bosses" from boss a, places b, place_boss ba where ba.bossid = a.bossid and ba.placeid = b.placeid group by job having Count(a.bossID)>1;