在PostgreSQL中按非字母顺序排序

时间:2019-03-18 14:16:08

标签: postgresql enums group-by sql-order-by

我正在自动执行一个工作流程,在该流程中,除了数字(文本类型)之外,输出还需要按照名称(internal_product,文本类型)的特定非字母顺序排列。首先,我运行一个子查询,其中我使用联接从四个略有不同的表中收集信息。然后,在外部union求和单位和金额之前,将结果附加group by。伪查询如下:

select name, number, internal_product, sum(units), sum(amount) from (
 select fields, sum(x)
  from t1
  join join-conditions
  join join-conditions
  group by name, number, internal_product
 union

.....

 select fields, sum(x)
  from t5
  join join-conditions
  join join-conditions
  group by name, number, internal_product
) as foo
group by name, number, internal_product
order by number, name;

我尝试将在一个联接中使用的帮助器表中的列更改为enum类型,因为它在外部group bySO-thread)中使用,但该列类型当然,连接条件必须相同,因此修改后的查询无效。产品名称共有30种,因此我想避免使用gbn和Guffa建议的CASE name

还有其他方法可以在order by中应用特定顺序吗?

1 个答案:

答案 0 :(得分:1)

对于您的情况而言,这可能是矫kill过正或复杂的,但是您可以在postgres中创建自定义排序规则,以对所需的方式进行排序。看一下文档。 https://www.postgresql.org/docs/11/collation.html