SQL select语句有问题

时间:2011-02-14 00:02:00

标签: sql

好的,我无法想象我有这个

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;

我在这里不允许使用群组功能我需要确保如果作业有一个老板则不会显示。

任何想法我在这里弄乱了什么?

5 个答案:

答案 0 :(得分:7)

您需要使用havingWhere子句不能包含聚合。另外,我已将其更改为使用显式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;