惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
S
Schneier on Security
G
GRAHAM CLULEY
AWS News Blog
AWS News Blog
Cisco Talos Blog
Cisco Talos Blog
The Hacker News
The Hacker News
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
L
LINUX DO - 热门话题
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Google DeepMind News
Google DeepMind News
H
Hacker News: Front Page
PCI Perspectives
PCI Perspectives
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
Netflix TechBlog - Medium
Application and Cybersecurity Blog
Application and Cybersecurity Blog
腾讯CDC
A
Arctic Wolf
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Project Zero
Project Zero
NISL@THU
NISL@THU
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
I
Intezer
Apple Machine Learning Research
Apple Machine Learning Research
T
Threat Research - Cisco Blogs
爱范儿
爱范儿
Webroot Blog
Webroot Blog
Forbes - Security
Forbes - Security
The Cloudflare Blog
T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
Microsoft Azure Blog
Microsoft Azure Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
B
Blog
The Register - Security
The Register - Security
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
V2EX - 技术
V2EX - 技术
P
Privacy & Cybersecurity Law Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - 每天进步多一点

MySQL5.7实现row_number()和over()函数 C#学习相关系列之Linq用法---group和join相关用法 linq group by having 实现 常用知识-T-SQL优化 mysql窗口函数、Mysql分析函数 MySQL系列三(定位慢SQL、索引优化、SQL优化)Using filesort MySQL 内存相关参数设置 MySQL COALESCE 函数使用详解 SQL性能优化指南:如何优化MySQL多表join场景 MySQL内部临时表(Using temporary)案例详解及优化解决方法 cookie操作类(加密,获取,删除) MySql 5.7 索引不存在则创建,存在则忽略 SQL SERVER年月周日超止时间 数据抽取的常见理论方法 ETL系列-数据抽取(Extract) 常用时间sql语句 数据库运维:mysql 数据库迁移方法-mysqldump MySQL的IFNULL()、ISNULL()、NULLIF()函数用法说明 如何看懂explain工具信息,使用explain工具来分析索引 mysql 如何查看sql语句执行时间和效率
了解MySQL中的JSON_ARRAYAGG和JSON_OBJECT函数
每天进步多一点 · 2025-11-28 · via 博客园 - 每天进步多一点

在MySQL数据库中,JSON格式的数据处理已经变得越来越常见。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它可以用来存储和表示结构化的数据。MySQL提供了一些功能强大的JSON函数,其中两个关键的函数是JSON_ARRAYAGG和JSON_OBJECT。本文将深入探讨这两个函数的用途、语法和示例,以帮助您更好地理解它们的功能和用法。

JSON_ARRAYAGG函数

JSON_ARRAYAGG函数用于将查询结果中的多个行合并为一个JSON数组。这对于在一个查询中汇总多个行的数据非常有用。以下是JSON_ARRAYAGG函数的基本语法:

JSON_ARRAYAGG(expression)
  • expression:要包含在数组中的表达式或列。

示例

我们可以使用JSON_ARRAYAGG函数将com_province 表中所有的省份名称合并为一个JSON数组:

# 查询省份表中所有的省份名称的JSON数组
select JSON_ARRAYAGG(province_name ) from com_province;

这将返回一个包含31省份的JSON数组:

["北京", "天津", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆", "四川省", "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区"]

JSON_OBJECT函数

JSON_OBJECT函数用于创建一个JSON对象,其中包含指定的键值对。这对于生成包含特定数据的JSON对象非常有用。以下是JSON_OBJECT函数的基本语法:

JSON_OBJECT(key1, value1, key2, value2, ...)
  • key1, value1, key2, value2, ...:键值对,键是字符串,值可以是任何有效的表达式。

示例:

使用JSON_OBJECT函数创建一个包含省份名称和省份编码的JSON对象

# 使用JSON_OBJECT函数创建一个包含省份名称和省份编码的JSON对象
select JSON_OBJECT('省份名称',province_name,'省份编码',province_code ) from com_province;

image

实战示例

我们有三张表,分别存储省份信息、地市信息和行政区信息,现在需要给客户端提供一个省市区的json数据,我们就可以使用JSON_ARRAYAGG 和 JSON_OBJECT 完成:

SELECT
    JSON_ARRAYAGG(
        JSON_OBJECT(
            'code',
            T1.province_code,
            'name',
            T1.province_name,
            'children',
            (
            SELECT
                JSON_ARRAYAGG( JSON_OBJECT( 'code', T2.city_code, 'name', T2.city_name,'children',
                    (
            SELECT
                JSON_ARRAYAGG( JSON_OBJECT( 'code', T3.area_code, 'name', T3.area_name ) ) AS test3 
            FROM
                com_area T3 
            WHERE
                T3.city_code = T2.city_code ORDER BY T3.sort asc
            ) 
            ) ) AS test2 
            FROM
                com_city T2 
            WHERE
                T2.province_code = T1.province_code  ORDER BY T2.sort asc
            ) 
        ) 
    ) AS test 
FROM
    com_province T1   ORDER BY  T1.sort asc