这要求您在排序之前对每个性别的分数进行排名。这是一个使用 MySQL 用户定义变量在派生表子查询中动态生成排名数字的技巧:
SELECT rank, gender, score, name
FROM (
SELECT STRAIGHT_JOIN score, name,
@rank:=IF(@gender=gender,@rank+1,1) AS rank, @gender:=gender AS gender
FROM (SELECT @gender:=NULL) AS _init
JOIN results
ORDER BY gender, score DESC
) AS ranked_scores
ORDER BY rank ASC, gender DESC;
在 MySQL 5.6.12 上测试。
输出:
+------+--------+-------+--------+
| rank | gender | score | name |
+------+--------+-------+--------+
| 1 | male | 126 | pierre |
| 1 | female | 99 | kate |
| 2 | male | 96 | robert |
| 2 | female | 38 | linda |
| 3 | male | 76 | jack |
| 3 | female | 33 | nina |
+------+--------+-------+--------+
这是SQLFiddle的链接,显示上面的查询有效。
回复您的评论:
如果您有任何错误,您需要更具体并分享错误消息。我猜不出你看到了什么。
我不打算回答有关按名称排序的问题。