2013-05-29 46 views
2

有沒有辦法在Postgresql 9.2+的having子句中使用聚合函數中的值?postgresql上的array_agg上的子選擇

例如,我想要得到每個monkey_id第二高的number> 123,以及第二高的數字。在下面的例子中,我想得到(monkey_id 1,number 222)。

monkey_id | number 
------------------ 
1   | 222 
1   | 333 
2   | 0 
2   | 444 

SELECT 
    monkey_id, 
    (array_agg(number ORDER BY number desc))[2] as second 
FROM monkey_numbers 
GROUP BY monkey_id 
HAVING second > 123 

我得到column "second" does not exist

回答

3

您將有地方having子句

SELECT 
    monkey_id 
FROM monkey_numbers 
GROUP BY monkey_id 
HAVING array_agg(number ORDER BY number desc)[2] > 123 

的解釋是,以前select所以second仍然沒有在那個時候存在having將被執行英寸