Выделить строки со значением> x внутри вложенного массива json - PullRequest
0 голосов
/ 01 мая 2018

Я бы хотел иметь возможность выбрать строки, где «лайки» больше 50.

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

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Предполагая тип данных json и что в вашем массиве всегда есть только один элемент , как показано:

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

Использование оператора json / jsonb #>> , который принимает текстовый массив как path . Индекс массива начинается с 0 в массиве JSON (в отличие от подсчета массива Postgres от 1 ).

Если в массиве может быть несколько элементов (что означает наличие массива в первую очередь), и вам нужна любая строка, в которую может быть включена хотя бы одна запись элемента, вещи стань более изощренным:

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

Связано с объяснением:

0 голосов
/ 01 мая 2018

Как насчет этого?

SELECT * FROM mytable WHERE JSON_EXTRACT_PATH_TEXT( jsoncolumn, 'likes' )::INTEGER > 50;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...