Tema clásico de MySQL

1. Preguntas comunes de la entrevista SQL: preguntas clásicas 50.

Desde Zhihu compartiendo https://zhuanlan.zhihu.com/p/38354000 (algunos temas)

Estructura de la mesa:

Tabla del alumno: alumno (número de alumno, nombre del alumno, fecha de nacimiento, sexo)

 

 

Tabla de puntaje: puntaje (número de estudiante, número de curso, puntaje)

 

 

 

Tabla del curso: curso (número del curso, nombre del curso, número del profesor)

Tabla del profesor: profesor (número de profesor, nombre del profesor)

 

 

1. Consulte los puntajes más altos y más bajos en cada materia, que se muestran en la siguiente forma: número de curso, puntaje más alto, puntaje más bajo (agregación agrupada por grupo)

seleccione courseid, max (puntaje), min (puntaje) del grupo de puntajes por curso;

 2. Consulte el número de estudiantes y el puntaje promedio de los estudiantes cuyo puntaje promedio es mayor a 60 puntos

seleccione stuid, avg (puntaje) 
del 
grupo de puntajes por stuid que 
tenga un promedio (puntaje)> 60;

3. Revise la lista de estudiantes del mismo nombre del mismo sexo y cuente el número de estudiantes con el mismo nombre.

seleccione stuname, count (stuid) 
del 
grupo de estudiantes por stuname que 
tiene count (stuid)> 1;

 4. Consulte el puntaje promedio de cada curso, los resultados se ordenan en orden ascendente de puntaje promedio, y cuando el puntaje promedio es el mismo, se ordenan en orden descendente por número de curso

seleccione courseid, promedio (puntaje) 
del 
grupo de puntajes 
por orden de curso por promedio (puntaje), desc. de curso;

 6. Consultar los números de estudiantes y las calificaciones promedio de dos o más cursos reprobados

seleccione stuid, avg (score) como avg_score 
de score 
donde score <60 
grupo por stuid 
que cuenta (courseid)> = 2;

 7. Consulte la identificación del estudiante y el nombre de todos los estudiantes cuyas calificaciones sean inferiores a 80

seleccione student.stuid, student.stuname 
del estudiante 
donde el estudiante no está ( 
seleccione estudiante diferente 
del puntaje 
donde puntaje> 80 
);

 8. Lista de estudiantes nacidos en 1990 (stubirtthdate es un tipo de fecha)

seleccione stuid, stuname 
del estudiante 
donde año (fecha de nacimiento) = 1990;

 9)

Pregunta TOPN para consultar el registro con la puntuación más alta en cada materia (subconsulta asociada )

seleccione * 
de puntaje como a 
donde puntaje = (seleccione máximo (puntaje) de puntaje como b donde a.courseid = b.courseid);

El orden anterior de subconsultas relacionadas

1. seleccione * de la puntuación 

2. seleccione max (puntuación) de la puntuación donde courseid = 0001 

3. seleccione * de la puntuación donde score = 81 y courseid = 0001

 Pregunta TOPN para  verificar los dos registros principales de cada sección (unión)

(seleccione * del puntaje donde courseid = 0001 ordenar por puntaje desc límite 2) 
unión 
(seleccione * del puntaje donde courseid = 0002 ordenar por puntaje desc límite 2) 
unión 
(seleccione * del puntaje donde cursoid = 0003 ordenar por puntaje desc límite 2) ;

 10. Consulta el número de transeúntes y transeúntes para cada curso (expresión de caso)

seleccione courseid, 
suma (caso cuando puntaje> = 60 luego 1 más 0 final) como jigerenshu, 
suma (caso cuando puntaje <60 luego 1 más 0 final) como bujigerenshu 
del 
grupo de puntaje por curso;

11. Use las secciones [100-85], [85-70], [70-60], [<60] para contar los puntajes de cada materia, respectivamente: el número de personas en cada sección, el número de curso y el nombre del curso ( expresión de caso )

seleccione score.courseid, course.coursename, 
sum (caso cuando el puntaje esté entre 85 y 100 y luego 1 finalice 0) como '[85-100]', 
sum (caso cuando el puntaje esté entre 70 y 85 y luego 1 finalice 0) como ' [70-85] ', 
suma (caso cuando el puntaje está entre 60 y 70 y luego 1 más 0 finaliza) como' [60-70] ' 
del puntaje derecho unirse al curso 
en score.courseid = curso.courseid 
grupo por curso;

 12. Intercambio de filas y columnas.

Consulte https://mp.weixin.qq.com/s/6Kll4Q6Xp37i2PiLUh4cMA

La siguiente es la tabla de puntaje del alumno (puntaje del nombre de la tabla, nombre de la columna: número del alumno, número del curso, calificación)

 

Use sql para convertir la fila de la tabla en la siguiente estructura de tabla

 

seleccione stuid, 
max (case Courseid cuando '0001' luego puntúa más 0 final) como '课程 号 0001', 
max (case courseid cuando '0002' luego califica otro 0 end) como '课程 号 0002', 
max (case Courseid cuando '0003' luego puntaje más 0 final) como '课程 号 0003' 
del 
grupo de puntaje por estudiante;

 

En segundo lugar, el reclutamiento de la escuela de Internet SQL escrito clásico 50 preguntas y análisis de respuestas

Desde Zhihu compartiendo https://zhuanlan.zhihu.com/p/53302593 (algunos temas)

Estructura de la mesa

Mesa de estudiante

 

 

 

Mesa del profesor

 

 

 

Horario del curso

 

Transcripción SC

 

 

 

1. Consulte los números de todos los estudiantes con calificaciones más altas en el curso "01" que en el curso "02" (genere una nueva conexión de mesa)

seleccione t1.sid distinto como sid 
desde 
(seleccione * desde sc donde cid = '01 ') como t1 
combinación izquierda 
(seleccione * desde sc donde cid = '02') como t2 
en t1.sid = t2.sid 
donde t1.score > t2.score;

 2. Consulte la identificación del estudiante y el nombre del estudiante que aprendió el número "01" y también el número "02"

seleccione sid, sname 
del estudiante 
donde sid IN 
(seleccione `sid` 
del 
grupo SC por` sid` #grouping para 
asegurarse de que los estudiantes 01 y 02 cursos hayan aprendido el conteo 
(if (cid = '01', score, null))> 0 y cuenta (if (cid = '02', score, null))> 0);

 3. Consultar la identificación del estudiante y el nombre de todos los estudiantes con menos de 60 puntos en el curso;

seleccione s_sid.`sid`, nombre.alumno 
from (seleccione `sid` distinto 
del 
grupo sc por` sid` 
con max (puntaje) <60) s_sid se 
unió al estudiante en s_sid.`sid` = estudiante.`sid`;

 4. Consulte la identificación del estudiante y el nombre de los estudiantes que no han completado todos los cursos;

seleccione ssid.`sid`, nombre.alumno 
from (seleccione `sid` 
del 
grupo sc por` sid` teniendo cuenta (`score`) <(seleccione cuenta (*) del curso)) ssid 
izquierda unirse al estudiante en ssid.`sid `= estudiante` sid`;

 5. Consulte la identificación del estudiante y el nombre de al menos una clase con el mismo número de clase que el estudiante con el número de clase "01"

seleccione 
sc.sid distinto 
de 
( 
seleccione 
cid 
de sc 
donde sid = '01 ' 
) t1 se 
une a sc 
en t1.cid = sc.cid;

 6. Consulte los números de estudiantes y los nombres de otros estudiantes cuyos cursos son los mismos que los de los estudiantes con el número "01"

seleccione t1.`sid`, student.sname 
from 
(seleccione sc`sid` 
from 
( 
seleccione cid 
from sc 
donde `sid` = 01 
) t1 se 
unió a sc en t1.`cid` = sc`cid` 
grupo por` sid` 
teniendo cuenta (sc.cid distinto) = (seleccione cuenta (cid distinto) de sc donde sid = '01')) t1 
dejó unirse al estudiante en t1.`sid` = estudiante `sid`;

 7. Consulte los números, nombres y calificaciones promedio de los estudiantes que reprobaron dos o más cursos.

seleccione ssid.`sid`, student.sname, ssid.`avg (score) ` 
de 
( 
seleccione sid, avg (score) 
del 
grupo sc por sid 
teniendo cuenta (if (score <60, score, NULL))> = 2 
) ssid dejó unirse al alumno en ssid`sid` = alumno`sid`;

 8. Consulte la información del alumno del segundo al tercer lugar en todos los cursos y los resultados del curso ( función de ventana )

seleccione `sid`, rank_num, score,` cid` 
de 
( 
select rank () over (PARTITION by `cid` order by score desc) como rank_num, 
` sid`, `score`,` cid` 
from sc 
) t 
donde rank_num en (2,3);

 9. Cuente el número de estudiantes en cada grado de cada grado: número de curso, nombre del curso, [100-85], [85-70], [70-60], [0-60] y el porcentaje

seleccione sc`cid`, cname, 
count (if (puntaje entre 85 y 100, score, NULL)) / count (sid) 
, count (if (puntaje entre 70 y 85, sid, nulo)) / count (sid) 
, count (if (puntaje entre 60 y 70, sid, null)) / count (sid) 
, count (if (puntaje entre 0 y 60, sid, null)) / count (sid) 
desde sc 
izquierda unirse al curso en sc. `cid` = curso`. 
grupo cid` por sc`cid`;

 10. Consultar el puntaje promedio y la clasificación del alumno ( función de ventana )

seleccione sid, avg_score, rank () over (ordenar por avg_score desc) 
de 
(select sid, avg (score) como avg_score 
del 
grupo sc por `sid`) t;

 11. Consulta los tres registros principales de cada tema ( función de ventana )

seleccione * de 
(seleccione `cid`,` sid`, rank () over (PARTITION by `cid` order by score desc) como rank_num 
from sc) t 
donde rank_num <= 3;

12. Verifique la edad de cada estudiante (curdate ())

seleccione sid, sname, year (curdate ()) - year (sage) como edad 
del estudiante;

 

2020.4.19 15:00

Supongo que te gusta

Origin www.cnblogs.com/fuyusheng/p/12731588.html
Recomendado
Clasificación