繁体   English   中英

MySQL-ORDER BY和GROUP BY一起

[英]MySQL - ORDER BY and GROUP BY together

我正在使用外部数据库,并且有3个重要的列: user_id,total_score,score_order

我想获得每个用户的total_score

所有分数总是记录下来,所以我只需要最后一个。 为此,我需要使用score_order列。

这就是我想要做的(使用嵌套查询,因为我需要组合ORDER BY和GROUP BY ):

SELECT * FROM (
    SELECT * FROM `table` ORDER BY score_order DESC
) AS tmp_table GROUP BY user_id

但是我得到了错误:

'#1055-SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'tmp_table.ranking_id',该列在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容有人可以解释我在做什么错吗?

在默认的GROUP BY模式下,您只能选择group by子句中的列或列上的聚合。

因此,例如,这可能有效:

SELECT user_id, MAX(total_score), MAX(score_order) as score_order_max 
FROM `table` GROUP BY user_id ORDER BY score_order_max DESC;

它与user_id因为它位于group by中,而其他两列为聚合。

我认为您不需要双重选择,因为MySql不是oracle。

您可以使用max-aggregate函数查找每个用户的最新score_order。 然后选择具有匹配的user_id和score_order的行。

select m.user_id, m.total_score
from mytable m
  join (
    select user_id, max(score_order) as score_order
    from mytable
    group by user_id
  ) s on s.user_id=m.user_id and s.score_order=m.score_order

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM