我刚刚开始学习SQL,前几天我正在处理一些基本示例。在这个例子中,我想找到我的朋友和队友喜欢的训练(根据我的朋友中有多少人喜欢训练,有多少朋友完成了训练,以及我的朋友在训练中的平均评分)。到目前为止,我使用子查询为每个训练的每种加权值赋予一个加权值。我想总结每次训练的加权值,每次训练总数,然后按总数排序训练列表,并从中选出前几名。SQL:按组查询的结果总计
这是我做的。
SELECT training_id, (5* COUNT()) AS [value]FROM progress
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
AND completed = 1
GROUP BY training_id
UNION ALL
SELECT training_id, (10 * AVG(rating))
FROM reviews
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
GROUP BY training_id
UNION ALL
SELECT training_id, COUNT()
FROM likes
WHERE user_id IN (SELECT friend_id AS user_ids FROM friendships WHERE user_id=6 UNION SELECT user_id FROM membership WHERE team_id IN (SELECT team_id FROM membership WHERE user_id = 6))
GROUP BY training_id
结果如下所示:
training_id value ______________________ 1 10 2 5 1 34.5 2 45 1 6 2 3
请让我知道,如果你知道的方式做到这一点,或者如果有这种方法,我应该寻找一种替代方法。
(表“喜欢”“评论”和“进步”都包含字段“training_id”。你想想加入三个表开始与什么?)
可能的字段名走前跑步 – Strawberry
你实际使用的数据库是什么?什么是期望的输出? –
为什么不使用SUM()函数来处理所有的值? –