【问题标题】:How do I conditionally find mode in PostgreSQL如何在 PostgreSQL 中有条件地查找模式
【发布时间】:2017-11-12 22:33:19
【问题描述】:

我的 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

我如何有条件地找到模式,有人可以帮助我吗?

【问题讨论】:

    标签: sql postgresql conditional mode


    【解决方案1】:

    我认为你的条件都归结为:

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

    如果group 有一行,那么mode() 不能返回NULL,因此不需要更外层的COALESCE()

    【讨论】:

    • 非常感谢,但是对于没有重复值(无模式)的 B 组,它返回 22.1,根据我的情况它应该返回零。
    • 为什么要按 DESC 排序?我在组内添加了这一行 mode()(按合并(长度,0)排序)并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多