Какую команду 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