Select 来自带有 WHERE 子句的 JSONB 字段

Select from JSONB field with WHERE clause

刚刚安装了 9.4 并尝试使用 JSONB 字段类型。

我用 jsonb 字段创建了一个 table 并且能够从中 select:

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 子句中使用 select 结果?

三处更正:

  • 将查询包装在子查询中 - 您不能在 WHERE 子句
  • 中引用 SELECT 列表别名
  • 使用 ->> 运算符获取文本形式的值
  • 将文本值转换为整数,以便进行比较

    SELECT *
      FROM (
        SELECT (statistics->'statistics'->'all_trades'->'all'->>'all_trades_perc_profit')::integer as profitable_perc
            FROM  trade_statistics
      ) sq1
      WHERE profitable_perc > 1