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:好的。我把答案的重要部分放在最上面。