我在postgresql中有一个表。下面的表“动物”可以解释我的问题:
name
------
tiger
cat
dog
字符串
现在我使用以下查询:
SELECT
array_to_string(array_agg("name"), ', ')
FROM
animals;
型
结果是:“tiger,cat,dog”。但我想在将聚合转换为字符串之前对其进行排序。因此,这是我希望的结果:
"cat, dog, tiger".
型
那么我如何在postgresql 8.4中对一个字符串数组进行排序,然后再将其转换为字符串呢?在行“name”上的ORDER BY不起作用,内置的sort函数只处理整数值。
有没有人有好主意,如何在纯SQL中解决这个问题?
谢谢理查德
6条答案
按热度按时间2skhul331#
在聚合表达式中使用
ORDER BY
子句:字符串
此外,对于您的特定目的,您可以使用
string_agg
来简化查询:型
lvjbypge2#
这将在PostgreSQL 9.0中提供:
http://www.postgresql.org/docs/9.0/static/release-9-0.html,第E.1.3.6.1节聚合
与此同时,你可以做一些类似的事情来解决这个问题(尽管有点笨拙):
字符串
fumotvh33#
虽然Matthew Wood的答案更适合你的情况,但这里有一种在PostgreSQL 8.4及更高版本中对数组排序的方法:
字符串
知道
array
和unnest
函数会很方便,因为它还允许你在数组上做"map"这样的事情:型
同样,这可以是你的PostgreSQL 8.4的价格。
0g0grzrc4#
你有没有试过在数组上使用
generate_series()
,然后在结果上做一个SELECT...ORDER BY
(或者只是把它嵌套在SELECT
里面),然后再把它转换成一个字符串?ioekq8ef5#
尽管如此,对于8.4版,使用Matthew Wood建议的解决方案,如果需要在外部查询中进行分组,内部查询也应该进行排序,以便排序一致。
字符串
kulphzqa6#
为了更新这个问题,Snowflake实现了数组排序:
字符串
也可以使用
array_sort_by
对对象进行排序