mysql pgsql 多行记录转JSON数组字段 行转json列

news/2024/7/9 23:23:12 标签: postgresql, mysql, sql, 数据库, json

sql>mysql pgsql 多行合并成一列

    • 数据库服务器环境
    • 原表结构和数据
      • students
      • scores
    • pgsql
      • SQL
      • 结果
    • sql>mysql
      • SQL
      • 结果
    • 相关文章导读

数据库服务器环境

数据库版本
sql>mysql5.7.34
PostgreSQL10.10

原表结构和数据

students

idnamegenderage
1张三33
2李四25
3小谢25
4小周26

scores

idscorestudent_idcourse
1671英语
2781数学
3882英语
4972数学
5763英语

sql_29">pgsql

SQL

sql">select students.*, array_to_json( array_agg (row_to_json(scores))) AS JsonArray
from students
left join scores on students.id = scores.student_id
group by students.id

另一种更简便的写法

sql">select students.*, jsonb_agg( distinct scores) AS JsonArray
from students
left join scores on students.id = scores.student_id
group by students.id

结果

idnamegenderagejsonarray
4小周26[null]
2李四25[{“id”:3,“score”:88,“student_id”:2,“course”:“英语”},{“id”:4,“score”:97,“student_id”:2,“course”:“数学”}]
3小谢25[{“id”:5,“score”:76,“student_id”:3,“course”:“英语”}]
1张三33[{“id”:1,“score”:67,“student_id”:1,“course”:“英语”},{“id”:2,“score”:78,“student_id”:1,“course”:“数学”}]

sql>mysql_59">sql>mysql

SQL

sql">SELECT students.*,
       JSON_ARRAYAGG(JSON_OBJECT('id', scores.id,
                                'score', scores.score,
                                'course', scores.course,
                                'student_id', scores.student_id)) AS JsonArray
FROM students
         left join scores on students.id = scores.student_id
GROUP BY students.id;

结果

idnamegenderageJsonArray
1张三33[{“id”: 1, “score”: 67, “course”: “英语”, “student_id”: 1}, {“id”: 2, “score”: 78, “course”: “数学”, “student_id”: 1}]
2李四25[{“id”: 3, “score”: 88, “course”: “英语”, “student_id”: 2}, {“id”: 4, “score”: 97, “course”: “数学”, “student_id”: 2}]
3小谢25[{“id”: 5, “score”: 76, “course”: “英语”, “student_id”: 3}]
4小周26[{“id”: null, “score”: null, “course”: null, “student_id”: null}]

相关文章导读

sql>mysql 在select查询语句中使用临时变量累计求和 ;
相同列值的记录中再根据条件取其中最大或最新一条;
sql>mysql经纬度求距离并排序

sql>mysql pgsql 实现多行记录合并成一行 分组合并 用指定字符做分割


http://www.niftyadmin.cn/n/1307380.html

相关文章

使用mybatis-plus 分页插件 PostgreSQL

使用mybatis-plus 分页插件 PostgreSQL前言环境一、使用步骤1.引入库2.mybatis-plus配置类使用分页分页类构造函数使用页索引使用元素偏移量mybatis-plus分页实现内部Postgre 数据库分页语句组装实现文章导读前言 mybatis-plus的查询默认提供了分页类和方法,但是需…

springboot-admin 监控

项目里面用着的完整的监控 直接上干货 创建监控项目admin pom.xml <parent><groupId>com.wkxhotel</groupId><artifactId>wkxhotel-parent</artifactId><version>1.0</version><relativePath>../pom.xml</relativePath>…

Unicode编码标准以及UTF

编码标准 ASCII 美国信息交换标准代码 American Standard Code for Information Interchange 显示现代英语和其他西欧语言 128个字符 GB2312-80 1980 年制定的中国汉字编码国家标准。共收录 7445 个字符&#xff0c;其中汉字 6763 个。GB2312 兼容标准 ASCII码&#xff0c;…

java8 stream api (三)

高级复杂的流操作 private static List<Person> list Arrays.asList(new Person("aa", 12), new Person("bb", 13), new Person("bb", 14),new Person("bb", 15), new Person("bb", 16));public static void main(S…

设置ssh登录Linux服务器和git上ssh的使用

设置ssh登录Linux服务器前言环境配置客户端服务器端可能碰到的问题使用密钥命令登录依然提示输入密码&#xff1f;&#xff1f;git如何使用ssh-key前言 我们在远程Linux服务器或者使用git的时候都需要输入密码登录后进行操作&#xff0c;在进行频繁操作的时候每次都要输入密码…

多线程编程 java.util.concurrent包下类

concurrentHashMap 使用的是分段式锁(分段式锁就是Segment)在迭代的过程中&#xff0c;ConcurrentHashMap仅仅锁定map的某个部分&#xff0c;而Hashtable则会锁定整个map。HashTable的迭代器是强一致性的&#xff0c;而ConcurrentHashMap是弱一致的。 ConcurrentHashMap的get&a…

线程池参数设计技巧

ThreadPoolExecutor线程池参数设置技巧 一、ThreadPoolExecutor的重要参数 corePoolSize&#xff1a;核心线程数 核心线程会一直存活&#xff0c;及时没有任务需要执行 当线程数小于核心线程数时&#xff0c;即使有线程空闲&#xff0c;线程池也会优先创建新线程处理 设置all…

C++与正则表达式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 ​​​​​​正则表达式 特性 元字符 分组&#xff08;子模式&#xff09; C regex 以R开头的字符串字面值 代码示例 相关文章导读 Unicode编码标准以及UTF&#xff08;…