2017-03-08 51 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 

代替,因为在那里没有按工作不正常。

+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