--取分组中出现频率最高的值或表达式,如果最高频率的值有多个,则随机取一个.
mode() WITHIN GROUP (ORDER BYsort_expression)
postgres=# create table test(id int,info text);CREATE TABLEpostgres=# insert into test values (1,'test1');INSERT 0 1postgres=# insert into test values (2,0)">postgres=# insert into test values (3,'test4');INSERT 0 1postgres=# select * from test;id | info----+-------1 | test11 | test21 | test32 | test13 | test4(12 rows)
取出所有数据中,出现频率最高的info,有可能是test1也有可能是test4,因为他们的出现频率一致.
mode的返回结果数据类型和order by后面的表达式一致.
# select mode() within group (order by info) from test;
mode
-------
test1
(1 row)
如果按INFO来分组的话,取出出现频率最高的info,实际上这个操作是没有任何意义的,返回值就是所有记录的info的唯一值.
# select mode() within group (order by info) from test group by info;
test2
test3
test4
(4 rows)