mysql5.7 implémente la fonction de tri au sein du groupe après le regroupement ROW_NUMBER() OVER (PARTITION BY)

Dans mysql8.0 et supérieur, il existe la fonction ROW_NUMBER() OVER (PARTITION BY) qui peut être regroupée et triée au sein du groupe, mais dans les versions inférieures à 5.7, cette fonction n'est pas disponible. Nous pouvons utiliser des variables temporaires pour obtenir cet effet .

1 groupe par

Exemple de demande : nous devons maintenant compter les classements de performance des élèves dans diverses matières. Nous devons installer des matières pour les regrouper, puis les trier dans l'ordre inverse des scores.
Il y a une table d'étudiant comme suit :

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;

Les données du tableau sont les suivantes :
id nom sujet score
1 Zhang San chinois 77
2 Li Si chinois 67
3 Wang Wu chinois 85
4 Zhang San Mathématiques 82
5 Li Si Mathématiques 67
6 Wang Wu Anglais 85
7 Wang Wu Mathématiques 85

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

Je suppose que tu aimes

Origine blog.csdn.net/web13618542420/article/details/126802806
conseillé
Classement