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

标签 sql postgresql conditional-statements 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.7

对于每个组,我想使用 PostgreSQL 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

如果你有一行 group,那么 mode() 不能返回 NULL,所以更远的 COALESCE() 不需要。

关于sql - 如何在 PostgreSQL 中有条件地查找模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482665/

相关文章:

MySQL - 至少其中之一且大于 3 个表

mysql - 在 MySql 中锁定表

django - 在 Digital Ocean Droplet 中更新 Django postgresql 数据库?

python - psycopg2 和 SQL 注入(inject)安全

java - 如何创建一个检查这些值的循环?

python - 如何检查没有参数发送到 Python 中的函数

python - 分析标签集的最佳方法?

SQL查询从双重返回N行

ruby-on-rails - 具有多个条件的Postgresql INNER JOIN

arrays - Perl在输入条件之前更改条件内的值?