Columnas específicas de fila de MySQL (calificaciones de los estudiantes)

Tabla de contenido

caso-cuando implementación:

 unirse


        Diseño de boleta de calificaciones estudiantil, estudiante, curso, puntaje. Pero a veces, al mirar los datos en la página, desea ver claramente los logros de una persona. Este tipo de trabajo exigente, especialmente para los colegas que informan, es bastante común. Este tipo de problema se denomina "fila a columna". Aquí se proporcionan dos métodos de implementación case-when y join.

mesa de estudiante

CREATE TABLE `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `s_name` varchar(45) DEFAULT NULL,
  `course` varchar(45) DEFAULT NULL,
  `score` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='学生成绩';

INSERT INTO `score` VALUES (1,'bao','语文',88),(2,'bao','数学',99),(3,'bao','英语',90),(4,'erbao','语文',93),(5,'erbao','数学',92),(6,'erbao','英语',86);

Como se muestra en la imagen:

caso-cuando implementación:

-- case when
select s_name,
max(case
when course='语文' then score
else 0
end) as 语文,
max(case
when course='数学' then score
else 0
end) as 数学,
max(case
when course='英语' then score
else 0
end) as 英语
from score
group by s_name

 unirse

-- join
select s1.s_name, s1.语文, s2.数学,s3.英语 from
(select s_name, score as 语文 from score where course='语文') s1 join
(select s_name, score as 数学 from score where course='数学') s2 on s1.s_name=s2.s_name join
(select s_name, score as 英语 from score where course='英语') s3 on s2.s_name=s3.s_name

Supongo que te gusta

Origin blog.csdn.net/u011471105/article/details/124654789
Recomendado
Clasificación