如何在postgres中按不同列删除空间和分组后获得唯一值

Posted

技术标签:

【中文标题】如何在postgres中按不同列删除空间和分组后获得唯一值【英文标题】:How to get unique value after removing space and group by some different column in postgres 【发布时间】:2016-05-21 06:29:12 【问题描述】:

我有一张这样的桌子

id type note
1   A   ab cd
1   B   cdef
1   A   abd
1   A   abcd

我想在删除空格后得到所有唯一的音符,所以我的结果会是这样的

id type note
1   A   ab cd
1   A   abd
1   B   cdef

因为删除空格后 ab cdabcd 将是相同的。 我正在使用 Postgres。请注意,id 列不是唯一的。

【问题讨论】:

【参考方案1】:

这是一个经典的分组最大值,但您只需将其分组到表达式而不是列上

SELECT id, type, note FROM
  (SELECT DISTINCT ON(replace(note,' ',''))
     id
     ,type
     ,note
   FROM table1
   ORDER BY replace(note,' ','')
  ) AS q

sqlfiddle

【讨论】:

它只返回唯一值...基于 id ,类型 .. 不是多条记录。 它的工作原理与示例中的完全相同(参见小提琴)。如果它不能按您的意愿工作,请改进问题。 干它可以工作..我有一个不同的数据集让我感到困惑..它可以工作:+1【参考方案2】:

由于您似乎在使用 Rails(根据您的标签),您还可以使用 ActiveRecord 获取 note 的所有唯一实例,忽略任何空格:

WhateverModel.pluck("REPLACE(note, ' ', '')").uniq

【讨论】:

以上是关于如何在postgres中按不同列删除空间和分组后获得唯一值的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)

Access查询中按不同列功能选择列

如何在R中按两列分组

如何在 Hive 中按列分组使用聚合函数

在 LINQ 中按特定列分组 [重复]

pandas 如何使用 groupby 在标签中按日期对列进行分组?