如何在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 cd 和 abcd 将是相同的。 我正在使用 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中按不同列删除空间和分组后获得唯一值的主要内容,如果未能解决你的问题,请参考以下文章