比较来自世界各地的卖家的域名和 IT 服务价格

MySQL 订购几列 ASC 和 DESC

我有 2 MYSQL 桌子,

用户



估计

. 细节:

用户表:


点表:


我的意图是获得列表 20 有分类字段的用户

小点

DESC /下降/ 和排序

场地 avg_time ASC /上升/. 我使用查询:


SELECT users.username, scores.point, scores.avg_time
FROM scores, users
WHERE scores.user_id = users.id
GROUP BY users.username
ORDER BY scores.point DESC, scores.avg_time
LIMIT 0, 20


结果,事实证明:


结果不是必需的,因为第一行完全是相等的 point = 100 和 avg_time = 60.

我想要的结果:


username point avg_time
demo123 100 60
demo123456 100 100
demo 90 120


我尝试了不同的要求,但结果仍然是错误的。 你能给我一些解决方案吗?

先感谢您!
已邀请:

莫问

赞同来自:

好吧,我想现在我明白你想要的东西,让我澄清在请求之前确认。 你需要 1 为每个用户录制。 对于每个用户,您希望录制最佳点。 从一个用户的最佳点,您想要获得具有最佳平均值的用户。 在您拥有所有价值之后 users "best", 您希望最终结果首先排序在最佳点......几乎是竞争评级。

所以,现在这个问题。 如果以上批准为真,则需要从最佳分数开始/每人的平均时间和分配此记录 "Rank". 与变量很容易 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


[/url]
请注意,由于内置 @variables, 需要接收答案,在每一行的末尾都有两个附加列。 只是 "left-over" 并且可以在您想要做的任何实际输出演示文稿中忽略...... OR, 您可以将所有级别包装在一起以获得您想要的几列,例如


select 
PQ.UserName,
PQ.Point,
PQ.Avg_Time
from
/ entire query above pasted here / as PQ

裸奔

赞同来自:

我想你想念桌子..

用户:要点 = 1 : *

只是
join

- 这不是解决方案。

这是你的意图吗?


SELECT users.username, avg/scores.point/, avg/scores.avg_time/
FROM scores, users
WHERE scores.user_id = users.id
GROUP BY users.username
ORDER BY avg/scores.point/ DESC, avg/scores.avg_time/
LIMIT 0, 20


/这请求获得所有用户的平均分数和中点 avg_time 下降,上升 /avg_time

如果你想获得评级的每一个分数? 使用
left outer join



SELECT users.username, scores.point, scores.avg_time
FROM scores left outer join users on scores.user_id = users.id
ORDER BY scores.point DESC, scores.avg_time
LIMIT 0, 20

裸奔

赞同来自:

@Drapp是天才。 我从来没有理解他如何编码他的 SQL, 因此,我试图用自己的意义引用他。


SELECT 
f.username,
f.point,
f.avg_time
FROM
/
SELECT
userscores.username,
userscores.point,
userscores.avg_time
FROM
/
SELECT
users.username,
scores.point,
scores.avg_time
FROM
scores
JOIN users
ON scores.user_id = users.id
ORDER BY scores.point DESC
/ userscores
ORDER BY
point DESC,
avg_time
/ f
GROUP BY f.username
ORDER BY point DESC


他使用了相同的结果 GROUP BY 反而 user @variables.

冰洋

赞同来自:

默认订单 pk id,所以结果

username point avg_time

demo123 100 90 ---> id = 4

DEMO123456 100 100 ---> id = 7

演示 90 120 ---> id = 1

要回复问题请先登录注册