【发布时间】:2014-09-30 13:42:20
【问题描述】:
我正在尝试根据另一列的值对一些不同的聚合文本的输出顺序进行排序,例如:
string_agg(DISTINCT sometext, ' ' ORDER BY numval)
但是,这会导致错误:
错误:在具有 DISTINCT 的聚合中,ORDER BY 表达式必须出现在参数列表中
我确实理解为什么会这样,因为如果两个重复值的 numval 不同,而另一个重复值介于两者之间,则排序将是“不明确的”。
理想情况下,我想按首次出现/最低排序值对它们进行排序,但在我的数据中,定义不明确的情况实际上很少见(它主要是我想用 @ 删除的顺序重复值987654324@),我最终并不特别关心他们的排序,并且会喜欢 MySQL 的 GROUP_CONCAT(DISTINCT sometext ORDER BY numval SEPARATOR ' ') 这样的东西,尽管它很草率,但它仍然可以正常工作。
我希望一些 Postgres 的扭曲是必要的,但我真的不知道最有效/最简洁的方法是什么。
【问题讨论】:
-
一些示例数据在这里会非常好 - sqlfiddle.com
标签: sql postgresql sql-order-by distinct aggregate-functions