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:
- 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
- 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
- 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
- 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