我有一个多项选择应用程序,带有项目,选项,答案和用户表:
- 一个项目基本上是一个问题。每个项目属于三个类别之一。该类别存储在
category
字段中。 - 每个项目都有几个链接到它的选项。每个选项都有
item_id
和points
字段。 - 每当用户选择一个选项时,就会创建答案。它具有
user_id
,item_ id
和option_id
字段。每个项目/用户对正好有一个答案。
我需要的
我想有一个查询,总结每个用户的结果,每行一个用户。每行应包含三列,其中包含用户在该类别中评分的点之和:
Name | Points in Cat1 | Points in Cat2 | Points in Cat3
John | 3 | 1.5 | 2
Jane | 2 | 2 | 1.5
我拥有的
i可以在单独的行中输出由用户和类别分组分组的点:
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.
我需要以给我相同数据的方式在第二个代码列表中修改查询的帮助,但是按照我在第一个列表中勾勒出的格式。
当表达式
时使用条件聚合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