如何在PostgreSQL中有条件地查找模式
我的PostgreSQL 9.5数据库中有一些示例数据,如下所示:如何在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
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
对于每个组,我希望使用PostgreSQLmode()
函数有条件地查找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))并成功了。