【问题标题】:How can I count same values in JSON found in MYSQL column?如何计算在 MYSQL 列中找到的 JSON 中的相同值?
【发布时间】:2022-01-08 20:30:20
【问题描述】:

我正在 MYSQL 列中收集 JSON 数据。 我想在这个 JSON 数据中计算具有相同关键字的数字。

示例 JSON 列:

id column
1 { "2": { "model": "Test Model" }, "3": { "model": "Test Model" } }
2 { "4": { "model": "Test Model" }, "2": { "model": "Test Model" } }
3 { "1": { "model": "Test Model" }, "4": { "model": "Test Model" } }
4 { "2": { "model": "Test Model" } }

我想要的输出:

key count
2 3
4 2
3 1
1 1

我可以使用简码轻松做到这一点吗?

Mysql版本:8.0.27

【问题讨论】:

  • 旁注:JSON 的架构对我来说看起来相当静态。您应该考虑不要滥用 JSON,而是使用关系方式,例如(查找和/或链接)表和列。那么这将是一个简单的聚合。
  • Mysql版本:8.0.27
  • 虽然将 JSON 记录存储在数据库中非常好,但如果您还发现自己需要使用 SQL 来查看这些记录,您将 SO MUCH BETTER围绕重要的字段定义真正的关系模式。在插入/更新时解析 JSON 一次,而不是每个单个查询效率更高。然后,您还可以在字段上使用 indexes,这是 SQL 性能的关键。同样,您不需要为所有 JSON 属性提取和定义关系字段……这只是您以后需要在查询中使用的字段。

标签: mysql sql json mysql-8.0


【解决方案1】:
SELECT jsontable.`key`, COUNT(*) `count`
FROM test
CROSS JOIN JSON_TABLE(JSON_KEYS(test.json_value),
                      '$[*]' COLUMNS (`key` INT PATH '$')) jsontable
GROUP BY jsontable.`key`

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=717eeeacb3bceb45a2094e46d37c8865

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 2016-05-01
    相关资源
    最近更新 更多