mysql子查询字段未知

sgtfey8w  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(309)

我读过很多帖子都有解决这个问题的方法,但这在我的情况下不起作用。我做错什么了这将给出每个用户的得分总和,这是查询结果的第一部分(聚合数据)

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个记录,其中包含最小值和最大值。

a5g8bdjr

a5g8bdjr1#

我做错什么了?
哦,天哪,从哪里开始。
我读过很多帖子
你应该注意哪些人投了赞成票,哪些人答对了,哪些人投了反对票,哪些人被否决了。前者将包括表格结构、投入和预期产出的例子。以及明确的问题。
我只想要两张唱片
这是来自源数据集还是来自聚合数据集?
后者是一个有点棘手的问题,在这里已经被问了很多遍,所以有多种不同性能特征的解决方案。手册中甚至有一章只涉及这个问题。该链接的当前内容使用子查询来标识min/max值,该值替换了说明max concat技巧的文档的早期版本,但也可以使用变量来标识子查询中的正确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
t98cgbkg

t98cgbkg2#

在你的查询中,你有一些sintax的问题,而且对聚合结果的计算过于复杂。。在cp1.*结果中,在cp2中有最小相关值。*最大相关值。
如果您需要同一行上最小行和最大行的所有结果,那么可以基于聚合结果使用两个内部联接

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

相关问题