我在完成此支点时遇到问题。我正在尝试各种各样的东西,但我似乎无法理解这一点。但是,由于我的运气通常会运行,我可能不得不再次重新开始。
我在这里看过stackoverflow,但似乎没有什么适合我的情况。尽管我可以告诉我所读到的其他问题是针对所有数字数据。我有一个数字和字符串的混合可能是问题,但我只需要更多的眼睛。
我正在编写一份报告,该报告将为系统中的每个用户显示一行,并显示他们每节课的分数。旋转列代表“课程模块”,并显示分数,“未开始”或“不完整”。
以下是一些查询的结果。这是正确的:
“结果”
+---------+-----------+--------------+-------------+
| user_id | module_id | total_failed | total_taken |
+---------+-----------+--------------+-------------+
| 605 | 89 | 0 | 0 |
| 605 | 90 | 0 | 0 |
| 605 | 91 | 0 | 0 |
| 606 | 89 | 2 | 3 |
| 606 | 90 | 1 | 4 |
| 606 | 91 | 0 | 0 |
| 634 | 89 | 0 | 3 |
| 634 | 90 | 0 | 4 |
| 634 | 91 | 0 | 0 |
+---------+-----------+--------------+-------------+
有了这个记录集我需要转动。
user_id将保留在第一列中,接下来的三列将转入用户的结果中,其中列数等于课程数。在此示例中,课程(模块)89,90和91将有三列。
我创建了一个函数"getModuleScore"
,它返回三个可能值中的一个:用户的分数(0.0 =< x =< 1.0)
,或两个文字之一:'not started'或'incomplete'。 (这是对这个函数的简单解释 - 它比我刚写的更多。)
如果我使用以下sql来旋转先前的结果(SQL中的“结果”表)
SELECT
results.user_id AS user_id
,
MAX(CASE WHEN module_id = 89
THEN (SELECT getModuleScore(89, total_taken, total_failed))
ELSE
'not_started'
END)
AS `mod_89_score`
,
MAX(CASE WHEN module_id = 90
THEN (SELECT getModuleScore(90, total_taken, total_failed))
ELSE
'not_started'
END)
AS `mod_90_score`
,
MAX(CASE WHEN module_id = 91
THEN (SELECT getModuleScore(91, total_taken, total_failed))
ELSE
'not_started'
END)
AS `mod_91_score`
FROM
results
GROUP BY
results.user_id
, results.module_id
我收到以下记录集。
+---------+--------------+--------------+--------------+
| user_id | mod_89_score | mod_90_score | mod_91_score |
+---------+--------------+--------------+--------------+
| 605 | not started | not_started | not_started |
| 605 | not_started | not started | not_started |
| 605 | not_started | not_started | not started |
| 606 | 0.333333333 | not_started | not_started |
| 606 | not_started | 0.750000000 | not_started |
| 606 | not_started | not_started | not started |
| 634 | 1.000000000 | not_started | not_started |
| 634 | not_started | 1.000000000 | not_started |
| 634 | not_started | not_started | not started |
+---------+--------------+--------------+--------------+
我想要的是:
+---------+--------------+--------------+--------------+
| user_id | mod_89_score | mod_90_score | mod_91_score |
+---------+--------------+--------------+--------------+
| 605 | not started | not_started | not_started |
| 606 | 0.333333333 | 0.750000000 | not_started |
| 634 | 1.000000000 | 1.000000000 | not_started |
+---------+--------------+--------------+--------------+
我尝试了什么:
答案 0 :(得分:0)
@AgRizzo得到了它。
当我从res.module_id
子句中删除GROUP BY
时,结果就是我正在寻找的。 p>