postgresql中的array_agg子查询

3

是否有一种方法可以在Postgresql 9.2+中的having子句中使用聚合函数的值?

例如,我想要获取每个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

我看到了错误信息:列“second”不存在

1个回答

4
您需要将它放在HAVING子句中。
SELECT 
  monkey_id
FROM monkey_numbers 
GROUP BY monkey_id
HAVING array_agg(number ORDER BY number desc)[2] > 123

解释是having 会在select之前被执行,因此那个时候仍不存在second

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接