我正在尝试根据另一列的值来排序一些不同的聚合文本的输出顺序,如下所示:
string_agg(DISTINCT sometext, ' ' ORDER BY numval)
但是,这会导致错误:
错误:在具有DISTINCT的聚合中,ORDER BY表达式必须出现在参数列表中
我确实理解为什么会这样,因为如果numval两个重复值中的一个不同,而另一个位于中间,则排序将是“不确定的” 。
numval
理想情况下,我想按首次出现/最低的顺序对它们进行排序,但是在我的数据中,定义不清的情况实际上很少见(我通常希望使用它来消除顺序重复的值DISTINCT),最终我不必特别在意它们的顺序,并且会对MySQL这样的东西感到满意,GROUP_CONCAT(DISTINCT sometext ORDER BY numval SEPARATOR ' ')尽管它草率地工作了。
DISTINCT
GROUP_CONCAT(DISTINCT sometext ORDER BY numval SEPARATOR ' ')
我希望有必要使用一些Postgres柔和的方法,但是我真的不知道最有效/简洁的方法是什么。
如果这是较大表达式的一部分,则select distinct在子查询中执行a可能会很不方便。在这种情况下,您可以利用string_agg()忽略NULL输入值的事实,并执行类似的操作:
select distinct
string_agg()
NULL
select string_agg( (case when seqnum = 1 then sometext end) order by numval) from (select sometext, row_number() over (partition by <whatever>, sometext order by numval) as seqnum from t ) t group by <whatever>
子查询添加一列,但不需要汇总数据。