5 preguntas de la entrevista común SQL

 

 

En cualquier trabajo centrada en los datos, tenemos un profundo conocimiento de SQL es la clave del éxito, aunque esto no es la parte más interesante del trabajo. De hecho, además de la SELECCIÓN DE DONDE GROUP BY ORDER BY, SQL y muchos más métodos. Cuanto más sepa la función, más fácil es el contenido y el funcionamiento de la consulta deseada.

 

Los autores desean aprender y comunicarse en este artículo las dos cosas siguientes:

 

función SQL distinto de 1) para estudiar y enseñar algunas funciones básicas

2) explorar algunas preguntas de la entrevista de práctica SQL

 

* El problema en este artículo sólo desde Leetcode

 

 

 

Pregunta 1: el segundo mayor salario

 

Escribir una consulta SQL para obtener el segundo salario más alto de la tabla de empleados. Por ejemplo, la tabla Employee dada a continuación, la consulta debe devolver 200 como el segundo salario alto. Si no hay segundo mayor salario, la consulta debe devolver nulo.

+----+--------+| Id | Salary |+----+--------+| 1   | 100     || 2   | 200     || 3   | 300     |+----+--------+

 

1) Solución A : Uso IFNULL , OFFSET

 

  • IFNULL (expresión, alt): Si nulo, IFNULL () Devuelve el valor especificado, de lo contrario devuelve el valor esperado . Si no hay un segundo salario más alto, lo usaremos devuelve un valor nulo.

  • OFFSET: se utiliza en conjunción con la cláusula compensar ignora la orderBy especificado primero n filas . Esto puede ser útil, ya que desea obtener la segunda fila (el salario segundo más alto)

SELECTIFNULL((SELECT DISTINCT SalaryFROM EmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1), null) as SecondHighestSalaryFROM EmployeeLIMIT 1

 

2) Solución B : usando MAX ()

 

Esta consulta representa el salario MAX seleccionado no es igual a la máxima salario, que es igual para seleccionar el segundo más alto salario.

SELECT MAX(salary) AS SecondHighestSalaryFROM EmployeeWHERE salary != (SELECT MAX(salary) FROM Employee)

 

 

Pregunta 2: duplicado e-mail

 

Escritura de consultas SQL para encontrar todo el correo electrónico duplicado nombrado Persona de la tabla.

+----+---------+| Id | Email    |+----+---------+| 1  | [email protected]  || 2  | [email protected]  || 3  | [email protected]  |+----+---------+

 

1) Solución A : subconsulta COUNT ()

 

En primer lugar, crear un sub-consulta que muestra el número de veces que la frecuencia de cada correo electrónico. Luego se filtra subconsulta donde el conteo es mayor que 1.

​​​​​​​

SELECT EmailFROM (SELECT Email, count(Email) AS countFROM PersonGROUP BY Email) as email_countWHERE count > 1

 

2) Solución B: HAVING cláusula

 

  • cláusula HAVING es, en esencia, puede WHERE y la agregación (GROUP BY) se usan en combinación.

SELECT EmailFROM PersonGROUP BY EmailHAVING count(Email) > 1

 

Pregunta 3: Aumento de la temperatura

 

Dada una tabla tiempo a continuación, escribir una consulta SQL para encontrar antes de que sus temperaturas más altas en comparación con todas las fechas de Identificación (ayer) la fecha.

+---------+------------------+------------------+| Id(INT) | RecordDate(DATE) | Temperature(INT) |+---------+------------------+------------------+|         1 | 2015-01-01         | 10                   ||         2 | 2015-01-02         | 25                   ||         3 | 2015-01-03         | 20                   ||         4 | 2015-01-04         | 30                   |+---------+------------------+------------------+

 

Solución: DATEDIFF ()

 

  • DATEDIFF es la diferencia entre dos fechas, porque hoy vamos a asegurarse de que la temperatura y la temperatura se comparó ayer.

 

En términos simples, la consulta es para seleccionar la temperatura en una fecha determinada es superior a la temperatura de Identificación de ayer.

SELECT DISTINCT a.IdFROM Weather a, Weather bWHERE a.Temperature > b.TemperatureAND DATEDIFF(a.Recorddate, b.Recorddate) = 1

 

Pregunta 4: Sector salario más alto

 

Empleados La siguiente tabla contiene todos los empleados. Cada empleado tiene un ID, un cheque de pago, hay una columna ID de departamento.

+----+-------+--------+--------------+| Id | Name   | Salary | DepartmentId |+----+-------+--------+--------------+| 1   | Joe   | 70000  | 1               || 2   | Jim   | 90000  | 1               || 3   | Henry | 80000  | 2               || 4   | Sam   | 60000  | 2               || 5   | Max   | 90000  | 1               |+----+-------+--------+--------------+

 

La siguiente tabla contiene los departamentos en todos los sectores de la empresa.

+----+----------+| Id | Name      |+----+----------+| 1   | IT        || 2   | Sales    |+----+----------+

 

consultas SQL de escritura para encontrar el salario más alto en cada uno de los empleados del departamento. Para estos dos cuadros, la consulta SQL debe devolver (el orden de las filas no importa) la siguiente línea.

​​​​​​​

+------------+----------+--------+| Department | Employee | Salary |+------------+----------+--------+| IT            | Max       | 90000  || IT            | Jim       |90000   || Sales        | Henry     | 80000  |+------------+----------+--------+

 

Solución : el EN cláusula

 

  • cláusula IN le permite utilizar múltiples cláusulas OR en la cláusula WHERE. Por ejemplo, cuando el país = 'Canadá' o país = 'EE.UU.' y WHERE país IN ( 'Canadá', 'EE.UU.') del mismo.

 

  • En este caso, queremos filtrar la tabla departamento para mostrar sólo el salario máximo para cada departamento (es decir DepartmentID). Entonces, podemos unir dos tablas, en la que el DepartmentID filtra y mesa Departamento de sueldos.

SELECTDepartment.name AS 'Department',Employee.name AS 'Employee',SalaryFROM EmployeeINNER JOIN Department ON Employee.DepartmentId = Department.IdWHERE (DepartmentId , Salary)IN( SELECTDepartmentId, MAX(Salary)FROMEmployeeGROUP BY DepartmentId)

 

 

Pregunta 5: asientos de intercambio

 

María es un profesor de secundaria, ella tiene un plano de la sala, por encima de las tiendas el nombre del estudiante y la correspondiente Identificación asiento. Columna ID es incrementos discretos, Mary querían asientos de intercambio adyacentes a los estudiantes.

 

Puede escribir consultas SQL a la salida de María?

+---------+---------+|    id     | student |+---------+---------+|    1      | Abbot   ||    2      | Doris   ||    3      | Emerson ||    4      | Green   ||    5      | Jeames  |+---------+---------+

 

Para la muestra de entrada, salida:

+---------+---------+|    id     | student |+---------+---------+|    1      | Doris   ||    2      | Abbot   ||    3      | Green   ||    4      | Emerson ||    5      | Jeames  |+---------+---------+

 

Nota: Si el número de alumnos es impar, no hay necesidad de cambiar el último asiento.

 

Solución : el caso de que el CUANDO

  • CASO CUANDO ENTONCES declaraciones pueden ser considerados como una instrucción IF de codificación.

  • Los primero comprueba si el número de filas cuando una instrucción es impar, si el número de líneas es impar, se aseguran de que el mismo número de identificación.

  • El segundo cuando los estados para cada ID se incrementa (por ejemplo, 1,3,5 convierte 2,4,6)

  • Del mismo modo, la tercera declaración cuando disminuye cada ID (2,4,6 convierte 1,3,5)

SELECTCASEWHEN((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THENidWHEN id%2 = 1 THEN id + 1ELSE id - 1END AS id, studentFROM seatORDER BY id

 

Estas son todas las soluciones, si hay alguna pregunta o comentario, otros comentarios por favor!

 

 

 
Publicados 363 artículos originales · ganado elogios 74 · vistas 190 000 +

Supongo que te gusta

Origin blog.csdn.net/sinat_26811377/article/details/104612057
Recomendado
Clasificación