Niuke database SQL real combat 06-encuentra el salario de todos los empleados cuando se unen al trabajo

Niuke database SQL real combat 06-encuentra el salario de todos los empleados cuando se unen al trabajo

Descripción del título

Encuentre el salario de todos los empleados en el momento del empleo, proporcione emp_no y sueldo, e invierta el orden de acuerdo con emp_no

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

Ingrese la descripción:

Ninguno

Descripción de salida:

emp_no salario
10011 25828
Omitido Omitido
10001 60117

Mi respuesta

select e.emp_no,s.salary
from employees e
left join salaries s
on e.emp_no = s.emp_no and e.hire_date = s.from_date
order by e.emp_no desc 

Esta pregunta debe prestar atención a los siguientes cuatro puntos de conocimiento:

  1. En los datos de prueba, salaries.emp_no no es único (porque el empleado con el número emp_no *** puede tener múltiples aumentos salariales, por lo que hay más de un registro correspondiente en salarios), employee.emp_no es único, es decir, habrá más datos en salarios Para los empleados, debe encontrar los registros correspondientes salaries.emp_no en employee.emp_no en la tabla de salarios, hay restricciones e.emp_no = s.emp_no
  2. Según el título, tenga en cuenta que los valores de salaries.from_date y employee.hire_date deben ser iguales, por lo que existen restricciones e.hire_date = s.from_date
  3. De acuerdo con el significado de la pregunta, debe organizarse en orden inverso al valor emp_no, por lo que ORDER BY e.emp_no DESC debe agregarse al final
  4. Para una buena legibilidad del código, la declaración Alias ​​alias se usa para simplificar a los empleados ae y los salarios a s, es decir, los empleados AS ey los salarios AS s, donde se puede omitir AS

Creo que la mejor respuesta

La tabla de empleados no es obligatoria en absoluto. .

select emp_no, salary from salaries
group by emp_no
having from_date = min(from_date)
order by emp_no desc
136 artículos originales publicados · Me gusta 58 · Visitas 360,000+

Supongo que te gusta

Origin blog.csdn.net/sunbocong/article/details/105480231
Recomendado
Clasificación