mysql5.7 implementa la función de clasificación dentro del grupo después de agrupar ROW_NUMBER() OVER (PARTITION BY)

En versiones superiores a mysql 8.0, hay una función ROW_NUMBER() OVER (PARTITION BY) que se puede usar para agrupar y ordenar dentro de grupos, pero las versiones inferiores a 5.7 no tienen esta función. Podemos usar variables temporales para lograr este efecto.

1 grupo por

Ejemplo de demanda: ahora necesitamos contar las clasificaciones de desempeño de los estudiantes en varias materias. Necesitamos instalar materias para agruparlas y luego ordenarlas en orden inverso a las puntuaciones.
Hay una tabla de estudiantes de la siguiente manera:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `name` varchar(5) NOT NULL COMMENT '学生姓名',
  `subject` varchar(6) DEFAULT NULL COMMENT '科目',
  `score` smallint(3) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

Los datos de la tabla son los siguientes:
id nombre sujeto puntuación
1 Zhang San Chino 77
2 Li Si Chino 67
3 Wang Wu Chino 85
4 Zhang San Matemáticas 82
5 Li Si Matemáticas 67
6 Wang Wu Inglés 85
7 Wang Wu Matemáticas 85

SELECT a.NAME, a.score, a.SUBJECT, @last :=IF(@FIRST = a.SUBJECT, @last + 1, 1 ) AS rn, @FIRST := a.SUBJEC

Supongo que te gusta

Origin blog.csdn.net/web13618542420/article/details/126802806
Recomendado
Clasificación