选择值为>的行x在嵌套的json数组中

时间:2018-04-30 21:42:38

标签: sql json postgresql

我希望能够选择“赞”大于50的行。

 {
  "id":2,
  "name":"TEST",
  "locations":[
    {
      "cityName":"NEW YORK",
      "lat":123, "lon":456,
      "likes":1000,
      "dislikes":5
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

这个怎么样?

SELECT * FROM mytable WHERE JSON_EXTRACT_PATH_TEXT( jsoncolumn, 'likes' )::INTEGER > 50;

答案 1 :(得分:0)

假设数据类型json并且您的数组始终只有一个元素,如下所示:

SELECT *
FROM   tbl
WHERE  (js_column #>> '{locations,0,likes}')::int > 50;

使用将文本数组作为路径的json / jsonb #>> operator。数组索引以JSON数组中的 0 开头(而不是从 1 计数的Postgres数组)。

如果数组可以包含多个元素(这首先是数组)并且您希望任何行至少有一个元素记录符合条件事情变得更加复杂:

SELECT *
FROM   tbl t
WHERE  EXISTS (
   SELECT FROM json_array_elements(t.js_column->'locations') elem
   WHERE  (elem->>'likes')::int > 50
   );

相关,有解释: