2016-11-21 10 views
0

集計関数の結果を条件として使用しようとしましたが、問題があります。基本的に、私はここ以上3.「ビューカウント」を持っている行を選択する必要が動作するコードです:条件として集計関数

SELECT b.BranchNo AS "Branch Number", 
p.PropertyNo || ', ' || p.PostCode || ', ' || p.City || ', ' || p.Street AS "Object address" , count(v.ViewDate) as "View count" 
FROM Branch b INNER JOIN PropertyForRent p ON b.BranchNo=p.PropertyBranchNo 
INNER JOIN Viewing v ON p.PropertyNo=v.ViewPropertyNo WHERE v.ViewDate>='2014-01-01' 
GROUP BY b.BranchNo, p.PropertyNo; 

私はそのようなものを使用しようとしていた。明らかに

HAVING count(v.ViewDate)>=3 

しかし、それのdidn仕事はありません。サブクエリを使わずにそのような条件を作る方法はありますか?

+3

'しかし、明らかにうまくいかなかったのですが... ....なぜ、うまくいきませんでしたか? – Lamak

+0

私が知っているようにHAVING節は、GROUP BYかデフォルトで現在のテーブルを使ってグループを作る必要があります。そして、ええ、それは実行するだけではなかった... – Glebzex

+0

なぜあなたのために働いていないだろうか?あなたのクエリにHAVING句をどこに置こうとしていましたか? –

答えて

0

selectのフィールドがgroup byと一致しないようですが、それ以外の「集計に基づく条件」は正確にhaving句の対象です。たとえば、次のクエリが機能します。

SELECT 
b.BranchNo AS "Branch Number", 
p.PropertyNo || ', ' || p.PostCode || ', ' || p.City || ', ' || p.Street AS "Object address" , 
count(v.ViewDate) as "View count" 
FROM Branch b INNER JOIN PropertyForRent p ON b.BranchNo=p.PropertyBranchNo 
INNER JOIN Viewing v ON p.PropertyNo=v.ViewPropertyNo WHERE v.ViewDate>='2014-01-01' 
GROUP BY b.BranchNo, p.PropertyNo, p.PostCode, p.City, p.Street 
HAVING count(v.ViewDate) >= 3; 
0

カウントを取得するには、テーブルのサブクエリを表示する必要があります。その後、それに参加してください。

SELECT b.BranchNo AS [Branch Number], 
    p.PropertyNo + ', ' + p.PostCode + ', ' + p.City + ', ' + p.Street AS [Object address], 
    v.ViewCount 

FROM Branch b 
    INNER JOIN PropertyForRent p ON b.BranchNo=p.PropertyBranchNo 
    INNER JOIN (SELECT ViewPropertyNo, COUNT(*) as ViewCount 
       FROM Viewing 
       WHERE v.ViewDate>='2014-01-01' 
       GROUP BY ViewPropertyNo 
       ) AS v ON p.PropertyNo = v.ViewPropertyNo 
WHERE v.ViewCount >= 3;