mysql - tienen - numero de empleados por departamento sql
Encuentre el salario máximo y el segundo máximo para una tabla de empleados MySQL (30)
Aquí cambia n
valor de acuerdo a tus requerimientos:
SELECT top 1 amount
FROM (
SELECT DISTINCT top n amount
FROM payment
ORDER BY amount DESC ) AS temp
ORDER BY amount
Supongamos que se le proporciona la siguiente tabla de base de datos simple llamada Empleado que tiene 2 columnas denominadas ID de empleado y Salario:
Employee
Employee ID Salary
3 200
4 800
7 450
Deseo escribir una consulta seleccione max (salario) como max_salary, 2nd_max_salary del empleado
entonces debería volver
max_salary 2nd_max_salary
800 450
Sé cómo encontrar el segundo salario más alto
SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
o para encontrar el nth
SELECT FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
pero no puedo averiguar cómo unir estos 2 resultados para el resultado deseado
Aquí hay otra solución que utiliza la sub consulta, pero en lugar de la cláusula IN usa el operador <operator
SELECT MAX(Salary) From Employees WHERE Salary < ( SELECT Max(Salary) FROM Employees);
Creo que es la forma más sencilla de encontrar MAX
y el segundo Salario MAX
. Puede intentarlo de esta manera.
SELECT MAX(Salary) FROM Employee; -- For Maximum Salary.
SELECT MAX(Salary) FROM Employee WHERE Salary < (SELECT MAX(Salary) FROM Employee); -- For Second Maximum Salary
Esta es una consulta increíble para encontrar el máximo nth: Por ejemplo: -
Desea encontrar el salario Salario de 8ª fila, Solo se cambió el valor indexado a 8.
Supongamos que tienes 100 filas con Salario. Ahora quieres encontrar el salario máximo para la fila 90. Acaba de cambiar el valor indexado a 90.
set @n:=0; select * from (select *, (@n:=@n+1) as indexed from employee order by Salary desc)t where t.indexed = 1;
Esta solución le dará a todos los empleados el nombre y el salario que tengan el segundo salario más alto
SELECT name, salary
FROM employee
WHERE salary = (
SELECT
salary
FROM employee AS emp
ORDER BY salary DESC
LIMIT 1,1
);
Esto debería funcionar igual:
SELECT MAX(salary) max_salary,
(SELECT MAX(salary)
FROM Employee
WHERE salary NOT IN
(SELECT MAX(salary)
FROM Employee)) 2nd_max_salary
FROM Employee
Esto funcionará para encontrar el número máximo n.
SELECT
TOP 1 * from (SELECT TOP nth_largest_no * FROM Products Order by price desc) ORDER BY price asc;
Para el quinto número más grande
SELECT
TOP 1 * from (SELECT TOP 5 * FROM Products Order by price desc) ORDER BY price asc;
Intente debajo de Query, estaba trabajando para encontrar el salario número N más alto. Simplemente reemplaza tu número con nth_No
Select DISTINCT TOP 1 salary
from
(Select DISTINCT TOP *nth_No* salary
from Employee
ORDER BY Salary DESC)
Result
ORDER BY Salary
La forma más sencilla de obtener el segundo y máximo salario
select
DISTINCT(salary)
from employee
order by salary desc
limit 1,1
Nota:
limit 0,1 - Top max salary
limit 1,1 - Second max salary
limit 2,1 - Third max salary
limit 3,1 - Fourth max salary
La mejor y más fácil solución: -
SELECT
max(salary)
FROM
salary
WHERE
salary < (
SELECT
max(salary)
FROM
salary
);
No es realmente una buena consulta pero:
SELECT * from (
SELECT max(Salary) from Employee
) as a
LEFT OUTER JOIN
(SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as b
ON 1=1
Para el segundo salario más alto, este trabajo para mí:
SELECT salary
FROM employee
WHERE salary
NOT IN (
SELECT MAX( salary )
FROM employee
ORDER BY salary DESC
)
LIMIT 1
Para salarios únicos (es decir, primero no puede ser igual a segundo):
SELECT
MAX( s.salary ) AS max_salary,
(SELECT
MAX( salary )
FROM salaries
WHERE salary <> MAX( s.salary )
ORDER BY salary DESC
LIMIT 1
) AS 2nd_max_salary
FROM salaries s
Y también porque es una forma innecesaria de resolver este problema (¿Alguien puede decir 2 filas en lugar de 2 columnas, LOL?)
Pienso que la manera simple en oráculo es esta:
SELECT Salary FROM
(SELECT DISTINCT Salary FROM Employee ORDER BY Salary desc)
WHERE ROWNUM <= 2;
Prueba asi
SELECT (select max(Salary) from Employee) as MAXinmum),(max(salary) FROM Employee WHERE salary NOT IN (SELECT max(salary)) FROM Employee);
(O)
Prueba esto, n sería el enésimo artículo que querrías devolver
SELECT DISTINCT(Salary) FROM table ORDER BY Salary DESC LIMIT n,1
En tu caso
SELECT DISTINCT(column_name) FROM table_name ORDER BY column_name DESC limit 2,1;
Puede escribir consultas SQL en cualquiera de sus bases de datos favoritas, por ejemplo, MySQL , Microsoft SQL Server u Oracle . También puede usar la función específica de la base de datos, por ejemplo, TOP, LIMIT o ROW_NUMBER para escribir consultas SQL, pero también debe proporcionar una solución genérica que debería funcionar en todas las bases de datos. De hecho, hay varias formas de encontrar el segundo salario más alto y debe conocer un par de ellas, por ejemplo, en MySQL sin usar la palabra clave LIMIT , en SQL Server sin usar TOP y en Oracle sin usar RANK y ROWNUM .
Consulta SQL genérica:
SELECT
MAX(salary)
FROM
Employee
WHERE
Salary NOT IN (
SELECT
Max(Salary)
FROM
Employee
);
Otra solución que utiliza sub consulta en lugar de la cláusula NOT IN. Utiliza el operador <
SELECT
MAX(Salary)
FROM
Employee
WHERE
Salary < (
SELECT
Max(Salary)
FROM
Employee
);
Puedes escribir 2 subconsultas como este ejemplo
SELECT (select max(Salary) from Employee) as max_id,
(select Salary from Employee order by Salary desc limit 1,1) as max_2nd
Si queremos encontrar un empleado que obtenga el 3º salario más alto, ejecute esta consulta
SELECT a.employeeid,
a.salary
FROM (SELECT employeeid,
salary,
Dense_rank()
OVER(
ORDER BY salary) AS n
FROM employee) AS a
WHERE n = 3
Qué deseas
Solo puede ejecutar 2 consultas como consultas internas para devolver 2 columnas:
select
(SELECT MAX(Salary) FROM Employee) maxsalary,
(SELECT MAX(Salary) FROM Employee
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as [2nd_max_salary]
Tratar
SELECT
SUBSTRING( GROUP_CONCAT( Salary ), 1 , LOCATE(",", GROUP_CONCAT( Salary ) ) -1 ) AS max_salary,
SUBSTRING( GROUP_CONCAT( Salary ), LOCATE(",", GROUP_CONCAT( Salary ) ) +1 ) AS second_max_salary
FROM
(
SELECT Salary FROM `Employee` ORDER BY Salary DESC LIMIT 0,2
) a
Demo here
con expresión de tabla común
With cte as (
SELECT
ROW_NUMBER() Over (Order By Salary Desc) RowNumber,
Max(Salary) Salary
FROM
Employee
Group By Salary
)
Select * from cte where RowNumber = 2
prueba esto
select max(salary) as first,
(select salary from employee order by salary desc limit 1, 1) as second
from employee limit 1
sin consulta anidada
select max(e.salary) as max_salary, max(e1.salary) as 2nd_max_salary
from employee as e
left join employee as e1 on e.salary != e1.salary
group by e.salary desc limit 1;
select e.salary from( SELECT * FROM Employee group by salary order by salary desc limit 2 ) e order by salary asc limit 1;
Encuentra el salario máximo de un empleado
Seleccione MAX (Salario) de un empleado
Encuentra el segundo salario más alto
Seleccione MAX (Salario) del empleado donde el salario no está en (Seleccione MAX (Salario) del empleado)
O
SELECCIONE MAX (Salario) de un Empleado DONDE Salario <> (seleccione MAX (Salario) de un Empleado)
Encuentre Nth Max Salary y por un breve detalle www.gurujipoint.com
Salario máximo:
select max(salary) from tbl_employee <br><br>
Segundo Salario Máx .:
select max(salary) from tbl_employee where salary < ( select max(salary) from tbl_employee);
$q="select * from info order by salary desc limit 1,0"; // display highest 2 salary
o
$q="select * from info order by salary desc limit 1,0"; // display 2nd highest salary
`select max(salary) as first, (select salary from employee order by salary desc limit 1, 1) as second from employee limit 1`
Para el salario máximo, simplemente podemos usar la función max, pero el segundo salario máximo deberíamos usar la sub consulta. en la sub consulta podemos usar la condición para verificar el segundo salario máximo o simplemente podemos usar el límite.
select * from
Employees where Sal >=
(SELECT
max(Sal)
FROM
Employees
WHERE
Sal < (
SELECT
max(Sal)
FROM
Employees;
));
select * from emp where sal =(select max(sal) from emp where eno in(select eno from emp where sal <(select max(sal)from emp )));
intente el código de arriba ...
si desea el tercer registro máximo, agregue otra consulta anidada "seleccione máximo (sal) de emp" dentro del corchete de la última consulta y proporcione un operador menos que delante.