2017-05-20 13 views
0

私のクエリは:PostgresqlのネストされたSELECT MAX(SUM())

select table.attribute, count(table.attribute) AS cnt from table 
group by table.attribute 
order by cnt desc; 

出力のようなものです:

attribute | cnt 
-----------+----- 
A   | 2 
B   | 2 
G   | 1 
F   | 1 

しかし、私は唯一の最大値(& B)をしたいです。

あなたがこれを達成するために CTEの電源を使用することができます

答えて

0

WITH count_values 
     AS (SELECT table.attribute, 
        Count(table.attribute) AS cnt 
      FROM table 
      GROUP BY table.attribute), 
     max_values 
     AS (SELECT Max(cnt) AS max_cnt 
      FROM (SELECT cnt 
        FROM count_values) sub) 
    SELECT * 
    FROM count_values cv 
      JOIN max_values mv 
      ON mv.max_cnt = cv.cnt; 
+0

あなたと@klinに感謝しているすべてのリソースは私のために働いていませんでした! – AnnoyedGuy

+0

@AnnoyedGuyのお手伝いをしてうれしいです –

0

あなたは、ネストの単一レベルでこれを行うことができます

with cte as (
    select *, Rank() over(order by cnt desc) as rnk from yourattribute 
) select * from cte where rnk = 1 
0

以下のようにあなたがランクを使用することができます。

select attribute, 
     cnt 
from (
    select attribute, 
     count(*) AS cnt, 
     max(count(*)) over() as max_cnt 
    from t 
    group by attribute 
) t 
where cnt = max_cnt;