gpt4 book ai didi

mysql - 将行乘以一行 - 问题

转载 作者:行者123 更新时间:2023-11-29 09:38:24 25 4
gpt4 key购买 nike

mdl_course 看起来像这样

id name
1 Course name
2 Other Name
3 Third name

第二个表我有 mdl_scorm_scoes_track

id, course_id,meta_key,meta_value
1 1 score 100
1 1 status passed
1 1 sesion_start xyz

我试图从每门类(class)的 200 个元 key 中提取 2 个元 key 得到这样的东西

id, course name, course_id, score status
1 Course name 1 100 passed

我无法让它工作。我得到了很多带有空数据的行

这是我尝试做的事情 https://www.db-fiddle.com/f/q8drxvhaY86BuiFrggxYWK/2

那里有两个表 mdl_course 、 mdl_scorm_scoes_track

SELECT sct.id,c.fullname,sct.userid,
max(case when sct.element ='cmi.core.lesson_status' then sct.VALUE end) AS STATUS,
max(case when sct.element ='cmi.core.score.raw' then sct.VALUE end) AS score
FROM mdl_scorm_scoes_track sct
JOIN mdl_course c ON c.id = sct.scormid WHERE sct.USERid = 2
group BY sct.id;

我得到了很多空行

id  fullname    userid  STATUS  score
2993 SCORM z JS 2 100
2996 SCORM z JS 2 passed
3019 SCORM z JS 2 incomplete
3022 SCORM z JS 2 75
3025 SCORM z JS 2 passed
3217 SCORM z JS 2 100
3220 SCORM z JS 2 passed

2993和2996应该是一行3022和3025以及3217和3220。

最佳答案

您需要通过添加条件来删除许多您不感兴趣的行

sct.element IN ('cmi.core.lesson_status', 'cmi.core.score.raw')

在 WHERE 子句中:

WHERE 
sct.USERid = 2
AND
sct.element IN ('cmi.core.lesson_status', 'cmi.core.score.raw')

此外,您还需要在 group by 子句中包含您选择的所有非聚合列:

SELECT 
sct.id,
c.fullname,
sct.userid,
max(case when sct.element ='cmi.core.lesson_status' then sct.VALUE end) AS STATUS,
max(case when sct.element ='cmi.core.score.raw' then sct.VALUE end) AS score
FROM mdl_scorm_scoes_track sct JOIN mdl_course c
ON c.id = sct.scormid
WHERE sct.USERid = 2
AND sct.element IN ('cmi.core.lesson_status', 'cmi.core.score.raw')
group BY sct.id, c.fullname, sct.userid

如果这不是您想要的分组,那么也许您需要重新考虑。

关于mysql - 将行乘以一行 - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57135218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com