数据库服务器环境

数据库版本
mysql5.7.34
PostgreSQL10.10

原表结构和数据

students

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

scores

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

pgsql

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

另一种更简便的写法

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”:“数学”}]

mysql

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}]

相关文章导读

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

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐