2017-07-12 8 views
0

Ok array_agg = naturalの最初の値なら、結果を排除する必要があるクエリを取得します。where句でaggregateを使用できない場合、結果を取得する方法

select 
    visitor_id, 
    array_agg(code 
    order by session_start) codes_array 
from mark_conversion_sessions 
where conv_visit_num2 < 2 
    and max_conv = 1 
    and (array_agg(code 
    order by session_start))[1] != 'natural' 
group by visitor_id 

しかし、私はこれを実行すると、私はエラーを取得する:

ERROR: aggregate functions are not allowed in WHERE 
LINE 31: and (array_agg(code 

だから私は、WHERE句でそのARRAY_AGGを参照することができます方法はありますか?

あなたは

+3

使用 'having' https://www.postgresql.org/docs/current/static/queries- table-expressions.html#QUERIES-GROUP –

+2

group byとclauseを使用してみます。 http://www.dofactory.com/sql/having – Nidhi257

+0

フィルタの行をフィルタリングするグループです。 – Mihai

答えて

1

having句は、グループ化されたデータにwhere句のように行動するために使用されてありがとう。

select 
    visitor_id, 
    array_agg(code order by session_start) codes_array 
from mark_conversion_sessions 
where 
    conv_visit_num2 < 2 
    and max_conv = 1 
group by visitor_id 
having 
    (array_agg(code order by session_start))[1] != 'natural' 

ドキュメント:having句に集計を使用している基準、例えば移動 https://www.postgresql.org/docs/9.6/static/tutorial-agg.html

+0

それはまさに私が必要としていたものでした。ありがとうございました! –

関連する問題