获取聚合函数的最大值

时间:2013-12-28 14:54:55

标签: postgresql

我只想返回count(object)最高的行,所以我写了这个查询

select klantnr, count(objectnaam)
from klanten inner join deelnames using(klantnr)
inner join reizen using(reisnr)
inner join bezoeken using(reisnr)

where objectnaam = 'Maan'

group by klantnr

现在,我做不到

select max(count(objectnaam))

我将如何解决这个问题?

我尝试过使用同样无效的子查询

select max(select count(objectnaam) from ....) 

我认为我需要在from中使用子查询,所以我重写了这样的查询,我认为它更接近实际答案,但仍然不对,因为现在它返回所有行的最大值。

       select klantnr, max(c)
FROM(
select klantnr, count(objectnaam) as c
from klanten inner join deelnames using(klantnr)
inner join reizen using(reisnr)
inner join bezoeken using(reisnr)
where objectnaam = 'Maan'
group by klantnr) as F

group by klantnr

感谢您给我的任何帮助!

2 个答案:

答案 0 :(得分:0)

您不提供表的结构,因此您可能需要修改以下查询。但它适用于PostgreSQL 9.x +

WITH t AS (
  SELECT klantnr, COUNT(objectnaam) AS c 
  FROM klanten 
  WHERE objectnaam = 'Maan'
  GROUP BY klantnr
  ORDER BY c DESC
  LIMIT 1
)
SELECT * FROM t
INNER JOIN deelnames USING(klantnr)
INNER JOIN reizen USING(reisnr)
INNER JOIN bezoeken USING(reisnr);

请参阅http://www.postgresql.org/docs/9.3/static/queries-with.html如何使用WITH QUERIES。

答案 1 :(得分:0)

我找到了一个简单的解决方案:

select  klantnr,count (klantnr)
from  bezoeken natural join deelnames
where objectnaam ='Maan'
group by klantnr
order by count desc
limit 1