我有一个查询,可以在分数表中获得用户排名。
SELECT
*
FROM
(SELECT
*, @rank:=@rank + 1 rank
FROM
(SELECT
user_id, SUM(round_total) TotalPoints
FROM
sx14sp_mem_picks
GROUP BY user_id) s, (SELECT @rank:=0) init
ORDER BY TotalPoints DESC) r
WHERE
user_id = 22234
领带存在问题。我有一个表字段“pick_date”,我想用它来打破关系。首先打出他的选秀权的用户击败领带。
有什么想法吗?
答案 0 :(得分:0)
除了总积分之外,你需要order
选择日期。但是,您所说的是每个用户多行。那么,我们来看看最后选择日期:
SELECT *
FROM (SELECT *, (@rank:=@rank + 1) as rank
FROM (SELECT user_id, SUM(round_total) as TotalPoints, max(pick_date) as max_pick_date
FROM sx14sp_mem_picks
GROUP BY user_id
) s CROSS JOIN
(SELECT @rank := 0) init
ORDER BY TotalPoints DESC, max_pick_date asc
) r
WHERE user_id = 22234;
答案 1 :(得分:0)
如果sx14sp_mem_picks.pickdate是断开关系的字段,则按sx14sp_mem_picks子查询的顺序添加,添加 min(pickdate)asc
这将把最早的选区放在第一位 - 你必须使用MIN()bc,你需要使用聚合函数,因为使用了“group by”。