如何在PostgreSQL中有条件地查找模式

如何在PostgreSQL中有条件地查找模式,sql,postgresql,conditional,mode,Sql,Postgresql,Conditional,Mode,我的PostgreSQL 9.5数据库中有一些示例数据,如下所示: Group length A 19.3 A 19.3 A 20.3 A 20.3 A 19.3 A 19.3 B 22.1 B 19.3 B B 15.5 B 12.8 B 14

我的PostgreSQL 9.5数据库中有一些示例数据,如下所示:

 Group      length
 A          19.3
 A          19.3
 A          20.3
 A          20.3
 A          19.3
 A          19.3
 B          22.1
 B          19.3
 B          
 B          15.5
 B          12.8
 B          14.7
对于每个组,我希望使用PostgreSQL
mode()
函数有条件地查找mode(最重复/常见的值),以便:

  • 如果长度为空,则将其替换为0.0
  • 查找每个/唯一组的模式
  • 如果有两种模式,则返回最大值
  • 如果模式不存在,则为该组返回0.0
所需的输出可能如下所示:

Group    length
A        19.3
B        0.0

我如何有条件地找到模式,有人能帮我吗

我认为你的情况可以归结为:

select group,
       mode() within group (order by coalesce(length, 0.0) desc)
from t
group by group

如果您有一行用于
,则
模式()
不能返回
NULL
,因此不需要进一步的外部
合并()

非常感谢,但对于没有重复值(无模式)的B组,它返回了22.1,并且根据我的条件,它应该返回零。为什么要按DESC排序?我在组中添加了这一行mode()(orderbycoalesce(length,0))并成功了。