0

9.4 をインストールし、JSONB フィールド タイプを使用しようとしています。

jsonb フィールドを含むテーブルを作成し、そこから選択できるようにしました。

select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM  trade_statistics

正常に動作します。

次に、フィールド値に基づいて結果をフィルタリングします。

select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM  trade_statistics WHERE profitable_perc > 1

//There is no "profitable_perc" column

動作しません。

結果を double に変換しようとしても、うまくいきません。

select cast(statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as double precision) as profitable_perc FROM  trade_statistics

//cant convert jsonb into double precision

jsonbの場合、WHERE句で選択結果をどのように使用すればよいですか?

4

1 に答える 1

6

次の 3 つの修正を行う必要があります。

  • サブクエリでクエリをラップします -句でSELECTリストのエイリアスを参照することはできませんWHERE
  • ->>演算子を使用して値をテキストとして取得します
  • 比較できるように、テキスト値を整数としてキャストします

    SELECT *
      FROM (
        SELECT (statistics->'statistics'->'all_trades'->'all'->>'all_trades_perc_profit')::integer as profitable_perc
            FROM  trade_statistics
      ) sq1
      WHERE profitable_perc > 1
    
于 2015-04-11T21:05:10.140 に答える