Какую команду SQL следует использовать для поиска строк, содержащих значение больше определенного числа?

как получить из базы данных все данные, в которых stat "5": "1.5" и stat "1": больше числа, полученного запросом. Например, я получаю число 100 по запросу и мне нужно получить stat "1": больше 100.

|id |prom       |stat                                               |user|date      |
|-----------------------------------------------------------------------------------|
|1  |77-4390    |{"1":"824","2":"30","3":"9026","4":"40","5":"1.5"} |11  |10.08.2024|
|-----------------------------------------------------------------------------------|
|2  |77-4391    |{"1":"904","2":"51","3":"9222","4":"40","5":"1.5"} |23  |10.08.2024|
|-----------------------------------------------------------------------------------|
|3  |77-4355    |{"1":"334","2":"30","3":"9026","4":"40","5":"2.5"} |45  |10.08.2024|
|-----------------------------------------------------------------------------------|
|4  |77-4391    |{"1":"824","2":"60","3":"9023","4":"40","5":"1.5"} |11  |10.08.2024|
|-----------------------------------------------------------------------------------|
|5  |77-4391    |{"1":"624","2":"50","3":"9046","4":"40","5":"3.5"} |19  |10.08.2024|
|-----------------------------------------------------------------------------------|
|6  |77-4391    |{"1":"24","2":"50","3":"9122","4":"40","5":"1.5"}  |15  |10.08.2024|
+-----------------------------------------------------------------------------------+ 

для вывода "5": "1.5" использую:
SELECT * from cst WHERE prom='77-4391' AND  stat LIKE '%5":"1.5%'

+-----------------------------------------------------------------------------------+
|id |prom       |stat                                               |user|date      |
|-----------------------------------------------------------------------------------|
|2  |77-4391    |{"1":"904","2":"51","3":"9222","4":"40","5":"1.5"} |23  |10.08.2024|
|-----------------------------------------------------------------------------------|
|4  |77-4391    |{"1":"824","2":"60","3":"9023","4":"40","5":"1.5"} |11  |10.08.2024|
|-----------------------------------------------------------------------------------|
|6  |77-4391    |{"1":"24","2":"50","3":"9122","4":"40","5":"1.5"}  |15  |10.08.2024|
+-----------------------------------------------------------------------------------+ 

Каким запросом получить данные где stat "1":> 100
+-----------------------------------------------------------------------------------+
|id |prom       |stat                                               |user|date      |
|-----------------------------------------------------------------------------------|
|2  |77-4391    |{"1":"904","2":"51","3":"9222","4":"40","5":"1.5"} |23  |10.08.2024|
|-----------------------------------------------------------------------------------|
|4  |77-4391    |{"1":"824","2":"60","3":"9023","4":"40","5":"1.5"} |11  |10.08.2024|
|-----------------------------------------------------------------------------------|

Ответы (2 шт):

Автор решения: CrazyElf

Примерно так должно быть, но не уверен, что с числами в качестве названий полей прокатит:

SELECT * from cst 
WHERE prom='77-4391' 
  AND stat->"$.5" = '1.5%'
  AND stat->"$.1" > 100

Возможно ещё поле придётся в INT "вручную" преобразовать перед сравнением.

Ну и какие тут кавычки я точно не скажу, не часто работаю с разными БД.

→ Ссылка
Автор решения: Sobolenko.Evgeniy

Вам следует уточнить, какой SQL сервер вы используете.

Если вы пользуетесь Postgresql, то данные в поле stat представляют собой hstore, и запрос будет выглядеть так.

SELECT your_fields 
FROM cst
WHERE stats -> '1' > 100  
→ Ссылка