2016-05-08 12 views
0

マイクエリ:postgresで列を選択するには?

ERROR:

select c.id, sum(case when r.paid_out>='1' then 0 else 1 end) as all_paids 
from people p1, houses h, policies p2, receipts r 
where p1.id = h.id 
and h.code = p2.code 
and p2.code_policy = r.code_policy 
group by p1.id 
having all_paids= 0; 

Postesqlは私に次のエラーが返されていない列 'all_paids'

は、私は任意のヘルプが

を高く評価され、いくつかのことが、何を試してみましたがあります

答えて

4

まず、適切なjoin構文を使用する方法を学びます。

select p1.id 
from people p1 join 
    houses h 
    on p1.id = h.id join 
    policies p2 
    on h.code = p2.code join 
    receipts r 
    on p2.code_policy = r.code_policy 
group by p1.id 
having sum(case when r.paid_out >= '1' then 0 else 1 end) = 0; 

注:定義されたc.idが存在しないので、私はselectgroup byに基づいてp1.idべきであると仮定し

第二に、あなたはhaving句または副問合せの式を使用することができます。

私はこのロジックは、しばしばnot existsを使用して表現されることを言う必要があります。

select p1.* 
from people p1 
where not exists (select 1 
        from houses h 
         policies p2 
         on h.code = p2.code join 
         receipts r 
         on p2.code_policy = r.code_policy 
        where p1.id = h.id and 
         r.paid_out >= '1' 
       ); 

これは凝集を排除します。

関連する問題