【问题标题】:MySQL - How to find number of occurance in JSON?MySQL - 如何在 JSON 中查找出现次数?
【发布时间】:2021-10-30 18:45:18
【问题描述】:

我有下表 -

+-----+-----------+--------------------------------------+
| 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"}    |
+-----+-----------+--------------------------------------+

我需要获取 service_values,其中 2 个或多个值小于 65。例如,根据上述记录,预期结果将是 -

    +-----+-----------+--------------------------------------+
    | id  | client_id | service_values                       |
    +-----+-----------+------------+-------------------------+
    | 100 |      1000 | {"1": "60", "2": "64", "3": "92"}    |
    | 103 |      1001 | {"1": "60", "2": "54", "3": "92"}    |
    +-----+-----------+--------------------------------------+

我找到了很多,但找不到任何东西可以在 JSON 数据中执行聚合函数。

更新 - 我尝试了类似的方法但没有成功 -

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

【问题讨论】:

  • 什么是精确 MySQL版本?
  • 感谢您的快速回复,我有“服务器版本:10.4.14-MariaDB - mariadb.org 二进制分发版”

标签: mysql sql mysql-json


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多