2011-02-14 5 views
2

[OK]を私は私は私が仕事は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 
    and Count(a.bossID)>1 
group by job; 

を持って、このいずれかを把握することはできません。

私は何をここで台無しにしていますか?

答えて

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; 
+0

+1。非常に速い! ;) –

+0

+1 - 非常にうまくいった。これは簡単なSQLトリガです。 – duffymo

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; 
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 
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; 
+0

Oppsはすでに3つの答え、聖なるくそ。私ができる時に私はマーティンズを受け入れます! – Jeff

+0

「Nevermind」?私は答えを受け入れるだろう。成功しなかった駐車場を探していたアイルランド人についてのジョークを思い出させる。彼は、もし神が駐車スペースを与えたら、彼はウィスキーをあきらめ、毎週日曜日に教会に戻ると誓った。彼の祈りが終わったのと同じように、奇跡的に彼の前にスペースが開かれました。 「気にしない」と彼は言った。「私は見つけた! – duffymo

+0

私は行くつもりだった:P私は私ができるときに私はマーティンズを受け入れるよ! :) – Jeff

3

where句は、文字通り、行レベルで適用されるべきです」この行を結果セットに含めるべきかどうかを指定します。 "決定が行われた時点で、すべての行がまだカウントされていないので、count()関数がその作業を終了することは不可能です。

ここにはhavingという句が入ります。それらは正確にwhere句に似ていますが、集計関数が作業を完了した後に結果セットがクライアントに送信される直前に適用されます。

SELECT * FROM table HAVING somefield='a' 
SELECT * FROM table WHERE somefield='a' 

を行う

技術的には、すべての行がフェッチされるため、having句は、次になくフェッチする前に濾過されるより、濾過し、サーバの一部に少しより多くの仕事を必要とするであろう除いて、同一です。

+0

良い説明!ありがとう+1 – Jeff