2017-03-08 8 views
0

私は、postgresqlテーブルで最も頻繁に値を見つけようとしています。問題は、そのテーブルで「グループ化」し、同じ名前の値から最も頻度の高いものだけを取得したいということです。 だから私は次のクエリがありますので、ネストされたクエリの属性別グループの取得

select name, 
    (SELECT value FROM table where name=name GROUP BY value ORDER BY COUNT(*) DESC limit 1) 
as mfq from table group by name; 

を、私は、where name=nameを使用して属性「名前」によって外部グループを取得しようとしているが、動作するようには思えないのです。どのようにそれを行う上の任意のアイデア?

編集:例えば、次の表に:

name value 
a   3 
a   3 
a   3 
b   2 
b   2 

私が取得したい:

name value 
a   3 
b   2 

しかし、上記の文が与える:代わりに

name value 
a   3 
b   3 

、どこdoesnのため、正しく動作しません。

+0

サンプルデータと希望の結果を提供できますか?あなたの説明はつづきにくいです。 –

答えて

1

クエリを機能させるには、テーブルエイリアスが必要です。表の別名の資格の列名が常に良いアイデアです:

select t.name, 
     (select t2.value 
     from table t2 
     where t2.name = t.name 
     group by t2.value 
     order by COUNT(*) desc 
     limit 1 
     ) as mfq 
from table t 
group by t.name; 
+0

それは、ありがとう、働く。 – thanasis2028

1

この場合のためのPostgreSQLで専用の機能があります:mode() ordered-set aggregate

が最も頻繁に入力値を返します
select name, mode() within group (order by value) mode_value 
from  table 
group by name; 

(等しく頻繁な結果が複数ある場合は、最初の値を任意に選択します) - order by count(*) desc limit 1と同じ動作です。

PostgreSQL 9.4以降から入手できます。

http://rextester.com/GHGJH15037

関連する問題