2016-11-14 14 views
0

order by節で関数呼び出しの結果を使用する方法はありますか?PostgreSQLの関数の結果を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; 

私の一般的な仮定は、これを行うことができないということですが、私は私は考えていなかったこと、これを達成するための方法があったかどうかを知りたかったです。

EDITは:上記のクエリは、クエリは、一般的にOKで、次のエラーに[22P02] ERROR: invalid input syntax for integer: "******"

+0

'ORDER BY tag_num'を試してみるとどのようなエラーが発生しますか? –

+0

@ MikeSherrill'CatRecall '直接関数呼び出しを使用するかどうか、または列エイリアスを使用するかどうかにかかわらず、同じエラーが発生します。 – Jared

+1

サブクエリに配置することはできますが、別の方法でもパフォーマンスに影響する可能性があります。 'SELECT * FROM(select it.item_type_id、it.asset_tag、split_part(it.asset_tag、 'ASSET'、2):: INTはtag_numとして からserials.item_typesから WHERE it.asset_tag LIKE 'ASSET%')をsq ORDER BY sq.tag_num'が動作するはずです。 – coladict

答えて

2

を与え、問題はいくつかの行の​​3210の結果が文字列******であるということです。その文字列は整数にキャストできません。

選択リストで注文とキャストを削除し、そのデータの問題を絞り込むために、たとえばwhere split_part(it.asset_tag, 'ASSET', 2) = '******'を追加することができます。

これが解決されると、そのような機能をリスト順に並べると、問題なく完了します。質問に関するコメントの文書の引用セクションは、UNIONINTERSECTIONなどの検索結果にorder by句を適用することを指しています。言い換えれば、順序によっては、このクエリで見つかった:

(select column1 as result_column1 from table1 
union 
select column2 from table 2) 
order by result_column1 

だけではない、個々の行の式には、蓄積された結果の列を参照することができます。

関連する問題