Mysql 列出拥有最多令牌的用户

Mysql 列出拥有最多令牌的用户,mysql,Mysql,这是我的tokens\u log表。我想列出10个拥有最多令牌的用户 所以结果应该是这样的: *# Username sumOfTokens* #1 tolgay007 500 #2 hzrose 100 ... 我尝试了遵循sql,但没有成功 SELECT * , SUM( token ) FROM `user_tokens_list` GROUP BY username ORDER BY SUM( token ) DESC LIMIT 10 如何实现

这是我的
tokens\u log
表。我想列出10个拥有最多令牌的用户

所以结果应该是这样的:

*# Username    sumOfTokens*

#1  tolgay007     500

#2  hzrose        100

...
我尝试了遵循sql,但没有成功

SELECT * , SUM( token )
FROM `user_tokens_list`
GROUP BY username
ORDER BY SUM( token ) DESC
LIMIT 10

如何实现这一点?

您需要在
group by
子句中列出所有未聚合的列,否则会出现错误(除非禁用选项
仅\u FULL\u group by
);这就是为什么使用
group by
选择*不是一个好做法的原因之一

select username, sum(token) total_tokens
from mytable
group by username
order by total_tokens desc

注意:mysql允许在
orderby
子句中使用表别名;当表达式变得比简单的sum()更复杂时,这可以使查询更容易理解。您需要的是groupby中的列,而不是*

  SELECT username , SUM( token )
  FROM `user_tokens_list`
  WHERE  transaction ='sale' 
  GROUP BY username
  ORDER BY SUM( token ) DESC
  LIMIT 10   
并在适当的地方使用

或者,如果需要所有列,则需要在用户名的子查询上进行联接

  SELECT user_tokens_list.*, t.sum_token 
  FROM `user_tokens_list`
  INNER JOIN  (
    SELECT username , SUM( token ) sum_token
    FROM `user_tokens_list`
    transaction ='sale' 
    GROUP BY username
    ORDER BY SUM( token ) DESC
    LIMIT 10    
  ) t on t.username  =  user_tokens_list.username

为什么不起作用?你有错误吗?@Barmar:我刚刚在我的答案中添加了更多的上下文。第一行仍然令人困惑,因为它暗示他在查询中没有使用聚合。@Barmar:好的。我把答案的重要部分放在最上面。