我看过很多帖子都有这方面的解决方案但这在我的情况下不起作用。我究竟做错了什么? - 这给了我每个用户得分的总和,这是第一部分。(聚合数据) The Query result
SELECT user_id, sum(score) as total_user_score
FROM (
SELECT comments_proper.user_id, comments_proper.score
FROM assignment_2.comments_proper
) AS rsch
GROUP BY user_id;
但是,我只想要包含最小和最高分数值的2条记录。
答案 0 :(得分:0)
在你的查询中你有一些sintax问题和聚合结果的计算过于复杂..在cp1。*结果你得到cp2中的min相关值。* max相关。
如果您需要同一行的最小和最大行的所有结果,您可以根据汇总结果使用几个内部联接
select cp1.* , cp2.*
from ( SELECT cp.user_id, sum(cp.score), min(cp.score) min_score, max(cp.score) max_score
FROM assignment_2.comments_proper cp
group by cp.user_id ) t
inner join assignment_2.comments_proper cp1 on cp1.user_id = t.user_id
and cp1.score = t.min_score
inner join assignment_2.comments_proper cp2 on cp2.user_id = t.user_id
and cp2.score = t.max_score
否则,如果您希望结果分为两行,一行为min,另一行为max
select 'min' , cp1.*
from ( SELECT cp.user_id, sum(cp.score), min(cp.score) min_score, max(cp.score) max_score
FROM assignment_2.comments_proper cp
group by cp.user_id ) t
inner join assignment_2.comments_proper cp1 on cp1.user_id = t.user_id
and cp1.score = t.min_score
union
select 'max' , cp2.*
from ( SELECT cp.user_id, sum(cp.score), min(cp.score) min_score, max(cp.score) max_score
FROM assignment_2.comments_proper cp
group by cp.user_id ) t
inner join assignment_2.comments_proper cp2 on cp2.user_id = t.user_id
and cp2.score = t.max_score
答案 1 :(得分:0)
亲爱的,从哪里开始。我做错了什么?
我看了很多帖子
你本来应该注意哪些人得到了投票和得到了很好的答案,而且这些答案被投票/关闭了。前者将包括表结构,输入和预期输出的示例。毫无疑问的问题。
我只想要2条记录
来自源数据集还是聚合数据集?
后者是一个稍微棘手的问题,已经在SO上多次询问和回答,有多种解决方案具有不同的性能特征。甚至还有一个chapter in the manual涵盖了这个问题。该链接的当前内容使用子查询来标识最小/最大值,该值替换解释the max-concat trick的文档的早期版本,但也可以使用变量来识别子查询中的正确caddidate行或使用排序。
然而,您在此处向我们展示的SQL与解决您描述的问题几乎无关,而且非常写得不好。
我不会提供每个解决方案的示例,但这将解决您的问题......
SELECT user_id, SUM(score)
FROM assignment_2.comments_proper
GROUP BY user_id
ORDER BY SUM(score)
UNION
SELECT user_id, SUM(score)
FROM assignment_2.comments_proper
GROUP BY user_id
ORDER BY SUM(score)
<强>更新强> 我没有测试过上面的内容。我测试了这个:
SELECT *
FROM (
SELECT user_id, SUM(score)
FROM assignment_2.comments_proper
GROUP BY user_id
ORDER BY SUM(score) LIMIT 0,1
) as lowest
UNION ALL
SELECT *
FROM (
SELECT user_id, SUM(score)
FROM assignment_2.comments_proper
GROUP BY user_id
ORDER BY SUM(score) DESC LIMIT 0,1
) as highest