在嵌套查询中按属性获取分组

Getting group by attribute in nested query

我试图在 postgresql table 中找到最频繁的值。问题是我还想 "group by" 在 table 中,并且只从具有相同名称的值中获取最频繁的值。 所以我有以下查询:

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" 获取外部组,但它似乎不起作用。有什么想法吗?

编辑:例如在下面table:

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

我想得到:

name    value
 a          3
 b          2

但是上面的语句给出了:

name    value
 a          3
 b          3

相反,因为 where 无法正常工作。

如果您希望查询有效,您需要 table 个别名。 Table 别名和限定的列名 总是 一个好主意:

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;

PostgreSQL 中有一个针对这种情况的专用函数:mode() ordered-set aggregate:

select   name, mode() within group (order by value) mode_value
from     table
group by name;

哪个 returns 最频繁的输入值(如果有多个相同频率的结果,则任意选择第一个) -- 这与 with 的行为相同你的 order by count(*) desc limit 1.

它可从 PostgreSQL 9.4+ 获得。

http://rextester.com/GHGJH15037