2017-07-12 61 views
0

好吧我有一個查詢,我需要省略結果,如果array_agg =自然的第一個值,所以我想我可以這樣做:如果我不能在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 
    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 

那麼,有沒有一種方法,我可以引用ARRAY_AGG在where子句中?

謝謝

+3

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

+2

嘗試使用group by和having子句。 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' 

文檔: https://www.postgresql.org/docs/9.6/static/tutorial-agg.html

+0

這正是我所需要的。謝謝! –