mysql desc asc 多个_MySQL ORDER BY多列ASC和DESC

好的,我想,我明白你现在想要什么,让我澄清一下在查询之前确认。每个用户需要1条记录。对于每个用户,您想要他们的最佳积分记录。每个用户的最佳点数,您想要的平均时间最好。一旦你拥有所有的用户“最好”的价值观,你希望最终的结果排在第一位的最佳分数…几乎像竞争对手的排名。

所以现在查询。如果上述声明准确无误,您需要首先得到每人的最佳点/平均时间,并为该条目分配“等级”。这很容易使用MySQL @变量完成。然后,只需包含一个HAVING子句,只保留这些记录为每个人排名1。最后按最佳点和最短平均时间应用顺序。

select

U.UserName,

PreSortedPerUser.Point,

PreSortedPerUser.Avg_Time,

@UserRank := if( @lastUserID = PreSortedPerUser.User_ID, @UserRank +1, 1 ) FinalRank,

@lastUserID := PreSortedPerUser.User_ID

from

( select

S.user_id,

S.point,

S.avg_time

from

Scores S

order by

S.user_id,

S.point DESC,

S.Avg_Time ) PreSortedPerUser

JOIN Users U

on PreSortedPerUser.user_ID = U.ID,

( select @lastUserID := 0,

@UserRank := 0 ) sqlvars

having

FinalRank = 1

order by

Point Desc,

Avg_Time

请注意,由于需要获取答案的内联@variables,每行末尾有两个额外的列。这些只是“遗留”,并且可以在您尝试执行的任何实际输出演示文稿中被忽略…或者,您可以将整个内容包装在一个更高的层次上,以获得所需的几个列

select

PQ.UserName,

PQ.Point,

PQ.Avg_Time

from

( entire query above pasted here ) as PQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值