【问题标题】:How to combine max and count in one query如何在一个查询中结合最大值和计数
【发布时间】:2021-06-10 17:29:47
【问题描述】:

我有一个关于“max”和“count”函数的简单问题。

我已经阅读了一些帖子,但它们并不能让我满意,或者我不能很好地理解它们以使用它们

我试着参考this

这是我的查询:

select wojewodztwo, count(*) as liczba from wojewodztwa 

inner join powiaty on wojewodztwa.klwoj = powiaty.klwoj 
inner join gminy on powiaty.klpow = gminy.klpow 
inner join miejscowosci on gminy.klgm = miejscowosci.klgm 

where miejscowosc = 'Nowy Dwór' 
group by wojewodztwo order by count(*) desc

这个查询的结果是这样的

现在我只想获得最大值行作为答案。我不想使用Limit 2 我想做类似 max(count) 的事情,但似乎聚合函数不能堆叠在一个上

【问题讨论】:

    标签: postgresql count subquery max


    【解决方案1】:

    使用窗口函数和 CTE 会更快更优雅:

    WITH
    T AS
    (
    SELECT wojewodztwo, COUNT(*) as liczba, MAX(COUNT(*)) OVER() AS MAX_liczba  
    FROM   wojewodztwa 
           INNER JOIN powiaty 
              ON wojewodztwa.klwoj = powiaty.klwoj 
           INNER JOIN gminy 
              ON powiaty.klpow = gminy.klpow 
           INNER JOIN miejscowosci 
              ON gminy.klgm = miejscowosci.klgm 
    WHERE  miejscowosc = 'Nowy Dwór' 
    GROUP  BY wojewodztwo
    )
    SELECT wojewodztwo, liczba
    FROM   T
    WHERE  liczba = MAX_liczba;
    

    【讨论】:

      【解决方案2】:

      听起来您想将FETCH FIRST 1 ROW WITH TIES 放在查询的末尾。此 WITH TIES 功能是在 v13 中引入的。

      在此之前,我认为您需要使用窗口函数围绕现有查询包装另一个查询(或在客户端执行此操作)。要使用窗口函数,您实际上必须将其包装在两层选择中,因为您不能在 where 子句中使用窗口函数,因此您需要在一层定义它并在外层使用它。

      所以它看起来像这样:

      select wojewodztwo, liczba from ( 
        select wojewodztwo, liczba, max(liczba) over () as _max from (   
          select wojewodztwo, count(*) as liczba from wojewodztwa 
          inner join powiaty on wojewodztwa.klwoj = powiaty.klwoj 
          inner join gminy on powiaty.klpow = gminy.klpow 
          inner join miejscowosci on gminy.klgm = miejscowosci.klgm 
          where miejscowosc = 'Nowy Dwór' 
          group by wojewodztwo
        ) f
      ) ff where _max=liczba
      

      【讨论】:

      • 我使用的是 pre v13。我不知道该怎么做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      相关资源
      最近更新 更多