I have following table -
+-----+-----------+--------------------------------------+
| id | client_id | service_values |
+-----+-----------+------------+-------------------------+
| 100 | 1000 | {"1": "60", "2": "64", "3": "92"} |
| 101 | 1000 | {"1": "66", "2": "64", "3": "92"} |
| 102 | 1000 | {"1": "70", "2": "64", "3": "92"} |
| 103 | 1001 | {"1": "60", "2": "54", "3": "92"} |
| 104 | 1001 | {"1": "90", "2": "64", "3": "92"} |
| 105 | 1002 | {"1": "80", "2": "64", "3": "92"} |
+-----+-----------+--------------------------------------+
I need to fetch service_values where 2 or more values is LESS THAN 65. For example from the above records, the expected result would be -
+-----+-----------+--------------------------------------+
| id | client_id | service_values |
+-----+-----------+------------+-------------------------+
| 100 | 1000 | {"1": "60", "2": "64", "3": "92"} |
| 103 | 1001 | {"1": "60", "2": "54", "3": "92"} |
+-----+-----------+--------------------------------------+
I find a lot but couldn't find anything to perform aggregate function in JSON data.
Update - I tried something like this but couldn't succeed -
SELECT JSON_UNQUOTE(JSON_EXTRACT(service_values,'$.1')) AS A1, JSON_UNQUOTE(JSON_EXTRACT(service_values,'$.2')) AS A2, JSON_UNQUOTE(JSON_EXTRACT(service_values,'$.3')) AS A3 FROM service_data HAVING A1 < 65 OR A2 < 65 OR A3 < 65
SELECT *
FROM test
WHERE (JSON_UNQUOTE(JSON_EXTRACT(service_values, "$.1")) < 65)
+(JSON_UNQUOTE(JSON_EXTRACT(service_values, "$.2")) < 65)
+(JSON_UNQUOTE(JSON_EXTRACT(service_values, "$.3")) < 65) >= 2;
https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=ea41cb428cbe356c9f98a99f59ca37dc