这些是我的桌子:
同学们
学生证 | 名字 |
---|---|
xk341 | XeraKay |
kj403 | 凯文乔 |
条款
学生证 | 年 | 术语 | 开始日期 | 结束日期 |
---|---|---|---|---|
xk341 | 2019 | 1 | 2019-09-01 | 2019-12-24 |
xk341 | 2019 | 2 | 2019-01-01 | 2019-03-05 |
xk341 | 2022 | 4 | 2022-05-01 | 2022-08-28 |
kj403 | 2022 | 4 | 2022-05-01 | 2022-08-28 |
课程
学生证 | 年 | 术语 | 课程代码 | 年级 |
---|---|---|---|---|
xk341 | 2019 | 1 | 198:033:111 | 'B' |
xk341 | 2019 | 1 | 198:033:124 | 'A' |
xk341 | 2019 | 2 | 350:043:323 | 'W' |
xk341 | 2022 | 4 | 750:452:256 | 'B+' |
kj403 | 2022 | 4 | 750:452:256 | 'C' |
我尝试使用 JSON_OBJECT、JSON_ARRAY、JOIN、GROUP BY 的不同组合,但无法产生我想要的结果。 我希望我的结果是一个 JSON_OBJECT,看起来像这样,具有基于 studentID、year、term、course:
的嵌套结构{
"studentResults": [
{"xk341": {
"name": "XeraKay",
"years": [
{"2019": [
{"1": {
"startDate": "2019-09-01",
"endDate": "2019-12-24",
"courses": [
{"courseCode": "198:033:111",
"grade": "B"
},
{"courseCode": "198:033:124",
"grade": "A"
}
]}
},
{"2": {
"startDate": "2019-01-01",
"endDate": "2019-03-05",
"courses": [
{"courseCode": "350:043:323",
"grade": "W"
}
]}
}
]},
{"2022": [
{"4": {
"startDate": "2022-05-01",
"endDate": "2022-08-28",
"courses": [
{"courseCode": "750:452:256",
"grade": "B+"
}
]
}}
]}
]}
},
{"kj403": {
"name": "KevinJo",
"years": [
{"2022": [
{"4": {
"startDate": "2022-05-01",
"endDate": "2022-08-28",
"courses": [
{"courseCode": "750:452:256",
"grade": "C"
}
]}}
]}
]}
}]
}
我尝试过很多事情, 我最接近的是:
SELECT DISTINCT JSON_OBJECT(
t.year, JSON_ARRAY(
JSON_OBJECT(t.term, JSON_ARRAY( (select DISTINCT GROUP_CONCAT(
JSON_OBJECT(
'courseCode',c.courseCode
))
FROM Courses c WHERE c.term = t.term and c.studentID = t.studentID)) )
) )
from Terms t, Courses c WHERE t.term = c.term AND t.studentID = c.studentID AND t.studentID in ('xk341','kj403')
GROUP BY t.term
;
这是我针对不同数据运行的结果,术语 2,3 没有在同一个 2014 年连接在一起
{
"2014": \[
{
"2": \[
"{"courseCode": "16:185:419"},{ "courseCode": "11:175:543"},{"courseCode": "21:940:365"},{ "courseCode": "16:198:501"}"
\]
}
\]
}
{
"2014": \[
{
"3": \[
"{"courseCode": "19:165:611"},{"courseCode": "03:709:257"},{"courseCode": "04:486:627"},{ "courseCode": "09:790:671"},{"courseCode": "09:920:272"}"
\]
}
\]
}
看起来 ChatGPT-4o 能够提出一个可以做到这一点的查询!