2013-05-29 3 views
2

Есть ли способ использовать значение из агрегатной функции в условии наличия в Postgresql 9.2+?Subselect on array_agg в postgresql

Например, я хотел бы получить каждый monkey_id со вторым самым высоким number> 123, а также вторым по величине номером. В приведенном ниже примере я хотел бы получить (monkey_id 1, номер 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

Вы должны будете поместить, что в статье, имеющей

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

Объяснение в том, что having будет выполняться до того, как select так second до сих пор не существует в то время.

Смежные вопросы