在 MySQL 5.7 中,可以使用子查询和变量来实现分组 row_number。
以下是具体的步骤:
- 使用子查询获取每个分组中的行数和排名。
SELECT t1.id,
t1.name,
t1.score,
(SELECT COUNT(*)
FROM table_name t2
WHERE t2.name = t1.name AND t2.score > t1.score) + 1 AS rank,
(SELECT COUNT(*)
FROM table_name t3
WHERE t3.name = t1.name) AS group_count
FROM table_name t1;
在此查询中,我们使用了两个子查询。第一个子查询计算了每个分组中比当前行分数高的行数,并将其与 1 相加得到当前行的排名。第二个子查询计算了每个分组中的行数。
- 将子查询结果与原始表连接起来。
SELECT t1.id,
t1.name,
t1.score,
t2.rank,
t2.group_count
FROM table_name t1
JOIN (SELECT t4.name,
(SELECT COUNT(*)
FROM table_name t5
WHERE t5.name = t4.name AND t5.score > t4.score) + 1 AS rank,
(SELECT COUNT(*)
FROM table_name t6
WHERE t6.name = t4.name) AS group_count
FROM table_name t4) t2
ON t1.name = t2.name;
在此查询中,我们使用了一个子查询来计算排名和分组大小,然后将其与原始表连接起来。
注意:以上查询中的 table_name 应替换为实际表名。