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

不工作。

如果我尝试将结果转换为双精度,也不起作用。

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

必须进行三项更正:

  • 将查询包装在子查询中 - 您不能在子句中引用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 回答