MySQL:Select 每个类别和用户的多项选择测试结果

MySQL: Select results per category and user for a multiple choice test

我有一个包含项目、选项、答案和用户表的多项选择应用程序:

我需要的

我想要一个汇总每个用户结果的查询,每行一个用户。每行应包含三列,其中包含用户在该类别中得分的总和:

Name | Points in Cat1 | Points in Cat2 | Points in Cat3
John | 3              | 1.5            | 2 
Jane | 2              | 2              | 1.5

我有什么

我可以输出按用户和类别分组的点 在不同的行:

SELECT
  u.id,
  u.first_name,
  i.category,
  sum(o.points)

FROM 
  answers a,
  options o,
  items i,
  users u

WHERE a.user_id = u.id
  AND a.option_id = o.id
  AND o.item_id = a.item_id
  AND i.id = a.item_id

GROUP BY u.id, i.category;

# Output:
# John   Cat1   3
# John   Cat2   1.5
# John   Cat3   2
# Jane   Cat1   2
# etc.

我需要帮助修改第二个代码清单中的查询,以提供相同的数据,但格式与我在第一个代码清单中勾画的格式相同。

使用 case when 表达式

条件聚合
select firstname,
       max(case when category='Cat1' then p end) "Points in Cat1"
       max(case when category='Cat2' then p end) "Points in Cat2",
       max(case when category='Cat3' then p end) "Points in Cat3"
from
(
SELECT
  u.id,
  u.first_name,
  i.category,
  sum(o.points) as p
FROM 
  answers a join users u on a.user_id = u.id join options o on a.option_id = o.id
  join items i on i.id = a.item_id
GROUP BY u.id, i.category, u.id,u.first_name
)AA group by firstname