【发布时间】:2016-09-17 18:19:27
【问题描述】:
因此,从 mysql 5.7 开始,我现在可以使用 json 数据类型,这在您使用 angularjs 等框架时非常有用。
现在,由于我对此相当陌生(而且这种数据类型也相当新),我想知道我是否可以对该数据集进行一些简单的操作。
例如,我在我的数据库中保存了一个 json,其中每个对象都包含以下字段:
name
country
phone_num
我想做的是总结每个国家有多少人,通常这样的选择会起作用
select country, count(*) as num_residents from mytable
但是我不太确定如何在具有 json 数据类型的表上使用这种选择语句。
谁能帮帮我?
更新
好的,所以我的表格如下所示:
id int(11) AI PK
date_created timestamp
data json
schema_id int(11)
数据如下:
[{"A": 1, "B": "Debra", "C": "Peters", "D": "dpeters0@accuweather.com", "E": "Female", "F": "Tsagaan-Ovoo"}, {"A": 2, "B": "Marc", "C": "Rasmussen", "D": "Marc@test.dk", "E": "Male", "F": "Copenhagen"}]
我正在尝试以下 sql 语句:
SELECT
data,
JSON_EXTRACT(data, "$.F") AS country,
count(JSON_EXTRACT(data, "$.F")) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country, data
但遗憾的是我得到了这个结果:
【问题讨论】:
-
Marc,看看
JSON_EXTRACT函数。你可以做类似select JSON_EXTRACT(doc, "$.country") as country, count(JSON_EXTRACT(doc, "$.country")) as num_residents from mytable -
@algor ive 更新了我的帖子,你能看看我做错了什么吗?
-
@MarcRasmussen 我可以看到数据实际上是 2 个文档(Debra 和 Marc)的数组,尝试按索引访问值:$[0].F 或 $[1].F(我有没有尝试过这种方法,因为我现在无法访问数据库)