【发布时间】:2016-01-04 09:38:16
【问题描述】:
几天前我刚开始学习 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 值 ______________________ 1 10 2 5 1 34.5 2 45 1 6 2 3如果您知道执行此操作的方法,或者是否有其他我应该研究的方法,请告诉我。
('likes' 'reviews' 和 'progress' 表都包含字段“training_id”。您如何看待加入三个表开始?)
【问题讨论】:
-
跑步前先走吧
-
您实际使用的是什么数据库?期望的输出是什么?
-
为什么不对所有值使用 SUM() 函数?
-
发布一些示例数据。
-
问题标记为 mysql、sql-server 和 sqlite。您实际使用的是哪个?
标签: mysql sql sql-server sqlite