详细分析Mysql中的 JSON_ARRAYAGG 基本知识(附Demo)

目录

  • 1. 基本知识
  • 2. Demo
    • 2.1 简单聚合
    • 2.2 带排序聚合
      • 2.2.1 子查询进行排序
      • 2.2.2 创建临时表
    • 2.3 带条件聚合
    • 2.4 多列聚合
    • 2.5 嵌套 JSON 结构

1. 基本知识

JSON_ARRAYAGG为 SQL 聚合函数,用于将一组值聚合为一个 JSON 数组

  • 多行结果组合成一个 JSON 数组形式的场景中非常有用
  • JSON_ARRAYAGG 可以与其他 JSON 处理函数(如 JSON_OBJECTAGG)结合使用,以构建复杂的 JSON 结构

其语法结构如下:

JSON_ARRAYAGG(expression [ORDER BY ...])
  • expression:要聚合的列或表达式
  • ORDER BY:可选,指定聚合值的排序顺序

2. Demo

为更好的加深印象,以Demo的方式进行展示

示例如下:

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100),department VARCHAR(100),salary DECIMAL(10, 2)
);INSERT INTO employees (id, name, department, salary) VALUES
(1, 'Alice', 'Engineering', 60000),
(2, 'Bob', 'Engineering', 70000),
(3, 'Charlie', 'HR', 50000),
(4, 'David', 'Engineering', 80000),
(5, 'Eve', 'HR', 55000);

由于我的Navicat版本较低,无法输出JSON_ARRAYAGG的相关结果

  • 要么使用其他工具,要么升级Navicat软件(后续以命令行的结果进行展示)

在这里插入图片描述

2.1 简单聚合

SELECT JSON_ARRAYAGG(name ORDER BY salary DESC) AS employees_names
FROM employees;

截图如下:

在这里插入图片描述

2.2 带排序聚合

内部嵌套排序,有些数据库是不支持的,即使8的版本号

SELECT JSON_ARRAYAGG(name ORDER BY salary DESC) AS employees_names

会输出如下:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY salary DESC) AS employees_names
FROM employees' at line 1

对于上述情况,使用如下方式进行处理

2.2.1 子查询进行排序

SELECT JSON_ARRAYAGG(name) AS employees_names
FROM (SELECT nameFROM employeesORDER BY salary DESC
) AS sorted_employees;

截图如下:

在这里插入图片描述

2.2.2 创建临时表

-- 创建临时表
CREATE TEMPORARY TABLE sorted_employees AS
SELECT name
FROM employees
ORDER BY salary DESC;-- 对临时表进行聚合
SELECT JSON_ARRAYAGG(name) AS employees_names
FROM sorted_employees;-- 删除临时表
DROP TEMPORARY TABLE sorted_employees;

截图如下:

在这里插入图片描述

2.3 带条件聚合

SELECT JSON_ARRAYAGG(name) AS engineering_employees
FROM employees
WHERE department = 'Engineering';

截图如下:
在这里插入图片描述

2.4 多列聚合

将员工的 name 和 salary 作为对象聚合为一个 JSON 数组

SELECT JSON_ARRAYAGG(JSON_OBJECT('name', name, 'salary', salary)) AS employees_info
FROM employees;#输出如下:
{"employees_info": [{"name": "Alice", "salary": 60000},{"name": "Bob", "salary": 70000},{"name": "Charlie", "salary": 50000},{"name": "David", "salary": 80000},{"name": "Eve", "salary": 55000}
]}

截图如下:

在这里插入图片描述

2.5 嵌套 JSON 结构

按部门聚合员工信息:

SELECT department, JSON_ARRAYAGG(JSON_OBJECT('name', name, 'salary', salary)) AS employees
FROM employees
GROUP BY department;# 输出如下
[{"department": "Engineering","employees": [{"name": "Alice", "salary": 60000},{"name": "Bob", "salary": 70000},{"name": "David", "salary": 80000}]},{"department": "HR","employees": [{"name": "Charlie", "salary": 50000},{"name": "Eve", "salary": 55000}]}
]

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业研发数据泄露损失严重,研发数据保护到底怎么才能有效落地?

数据已成为企业毋庸置疑的核心资产,而企业众多数据中,研发数据则占据着重要的角色,近年来,发生了多起企业研发数据被窃取或泄露的事件,给企业带来严重的名誉、经济损失: 小米公司:2023年1月&am…

Linux驱动应用编程(三)UART串口

本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程线程优化 前述 在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题&am…

华为机考入门python3--(33)牛客33-图片整理

分类:排序 知识点: 对字符串中的字符ASCII码排序 sorted(my_str) 题目来自【牛客】 def sort_images(s):# 可以使用ord(A)求A的ASCII值,需要注意的是A的值(65)比a的值小(97)sorted_images …

常见排序算法,快排,希尔,归并,堆排

后面的排序中都要用到的函数 //交换 void Swap(int* p1, int* p2) {int* tmp *p1;*p1 *p2;*p2 tmp; } 包含的头文件 "Sort.h" #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<time.h> #include<s…

70 Realistic Mountain Environment Textures Cliff(70+张真实的山地环境纹理)

大量适合山区和其他岩石环境的纹理--悬崖、岩石、砾石等等 每个纹理都是可贴的/无缝的,并且完全兼容各种不同的场景--标准Unity地形、Unity标准着色器、URP、HDRP等等都兼容。 所有的纹理都是4096x4096,并包括一个HDRP掩码,以完全支持HDRP。 特点。 70种质地 70种材料 70个地…

C#——固态数组

固态数组 概念: 1.数组 是存储一组相同数据类型的集合 2.数组分为 一线数组 多维数组 交错数组 3.一般情况下 一维数组 就称之为数组 声明: 方法1: 数据类型[ ] 数组名 new 数据类型[ 长度 ] 实例: int[] arr new int[10] 方法2: 数据类型[ ] 数组名 new 数据类型[ 长度…

AI视频教程下载:用LangChain开发 ChatGPT和 LLMs 应用

在这个快速变化的人工智能时代&#xff0c;我们为您带来了一场关于语言模型和生成式人工智能的革命性课程。这不仅仅是一个课程&#xff0c;而是一次探险&#xff0c;一次深入人工智能核心的奇妙之旅。 在这里&#xff0c;您将开启一段激动人心的旅程&#xff0c;探索语言模型…

利用架构挖掘增强云管理

管理当今复杂的云环境比以往任何时候都更加重要。 大多数企业依赖 AWS、Azure、Kubernetes 和 Microsoft Entra ID 等各种平台来支持其运营&#xff0c;但管理这些平台可能会带来重大挑战。 云优化的最大挑战涉及安全性、成本管理和了解云基础设施内错综复杂的相互依赖关系。…

【数据库】255对比256的优势

文章目录 2552^8-1 &#xff0c;很多时候用到255却步凑整到256&#xff0c;这是为啥呢?一番了解总结 2552^8-1 &#xff0c;很多时候用到255却步凑整到256&#xff0c;这是为啥呢? 比如下面的两种情况: RabbitMQ的routing_key 和 binding_key 的最大长度255 字节。Navicat添…

基于springboot实现农产品直卖平台系统项目【项目源码+论文说明】

基于springboot实现农产品直卖平台系统的设计演示 摘要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔…

常见的Web漏洞——CORS

渗透做了多年的朋友都知道&#xff0c;大洞小洞都是漏洞。因此也学习、沉淀一下以前没重视的漏洞。 简介 CORS&#xff08;Cross-Origin Resource Sharing&#xff0c;跨源资源共享&#xff09;是一种由Web浏览器实现的安全策略&#xff0c;用于控制一个Web页面&#xff08;服…

finereport 9.0 Tomcat 集群-来自帆软

Tomcat服务器集群 目录: 1. 描述3. 配置过程4. 结果测试 1. 描述 在单一的服务器上执行WEB应用程序有一些问题&#xff0c;当网站成功建成并开始接受大量请求时&#xff0c;单一服务器无法满足需要处理的负荷量。 另外一个常见的问题是会产生单点故障&#xff0c;如果该服务器坏…

AppML 下载

要下载 AppML&#xff0c;您可以访问菜鸟教程网站或自强学堂网站。AppML 不是一个产品&#xff0c;而是一个基于浏览器和服务器脚本的想法。您可以从这些网站下载适用于 PHP 或 ASP.NET 的 AppML 版本。下载文件将包含服务端脚本、样式文件、浏览器脚本和本地配置文件&#xff…

Java桥接模式

桥接模式 最重要的是 将 抽象 与 实现 解耦 , 通过组合 在 抽象 与 实现 之间搭建桥梁 ; 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )-CSDN博客 桥接模式&#xff08;Bridge Pattern&#xff09;-&#xff08;最通俗易懂的案例&#xff09;_桥接模式 例子-…

力扣 242题 有效的字母异位 记录

题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 …

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

有趣的C语言——我的C语言之路

记录一下关于C语言竞赛重刷的例题&#xff0c;有些真的很有意思&#xff0c;如果你觉得特别简单&#xff0c;那说明你很牛&#xff0c;小弟我甘拜下风&#xff01;! 勿喷 勿喷&#xff0c;仅记录学习历程&#xff08;有些特别基础的就不弄了&#xff0c;弄一些我觉得处理方法很…

Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接

步骤 1&#xff1a;运行 MySQL 容器 首先&#xff0c;确保你的 Docker 容器中运行了 MySQL 数据库。 docker run --name mysql-container -e MYSQL_ROOT_PASSWORDmy-secret-pw -d -p 3306:3306 mysql:latest--name mysql-container 为容器命名。-e MYSQL_ROOT_PASSWORDmy-sec…

python3 -m http.server 检查打包前端的项目

python3 -m http.server这是 Python 提供的一个内置的简单 HTTP 服务器。当你在终端中运行 python3 -m http.server 命令时(在对应的打包目录比如dist目录)&#xff0c;Python 会启动一个 HTTP 服务器&#xff0c;它会将当前工作目录下的文件作为静态文件提供给浏览器。这个服务…

LabVIEW软件开发人员的核心能力是什么

LabVIEW软件开发人员的核心能力包括以下几个方面&#xff1a; 1. LabVIEW编程技能 熟练掌握LabVIEW编程语言&#xff1a;包括虚拟仪器&#xff08;VI&#xff09;的创建、数据流编程、图形化编程技巧等。 模块化编程&#xff1a;能够设计和实现模块化的代码结构&#xff0c;便…