有没有办法在order by子句中使用函数调用的结果?
我目前的尝试(我也试过了一些细微的变化)。
SELECT it.item_type_id, it.asset_tag, split_part(it.asset_tag, 'ASSET', 2)::INT as tag_num
FROM serials.item_types it
WHERE it.asset_tag LIKE 'ASSET%'
ORDER BY split_part(it.asset_tag, 'ASSET', 2)::INT;
虽然我的一般假设是无法做到这一点,但我想知道是否有办法实现这一目标,而我并没有想到。
编辑:上面的查询提供了以下错误[22P02] ERROR: invalid input syntax for integer: "******"
答案 0 :(得分:2)
您的查询通常没问题,问题是对于某些行,split_part(it.asset_tag, 'ASSET', 2)
的结果是字符串******
。并且该字符串不能转换为整数。
您可能希望删除选择列表中的订单和强制转换,并添加where split_part(it.asset_tag, 'ASSET', 2) = '******'
,以缩小该数据问题的范围。
一旦解决了这个问题,按列表顺序排列这样的功能就完全没问了。该问题评论中文档的引用部分是指将order by子句应用于UNION
,INTERSECTION
等查询的结果。换句话说,在此查询中找到的顺序:
(select column1 as result_column1 from table1
union
select column2 from table 2)
order by result_column1
只能引用累积结果列,而不能引用各行的表达式。