pricing create crear sql database

create - sql database azure



Consulta para encontrar el n-ésimo valor máximo de una columna (25)

Quiero encontrar el segundo, tercer ... último valor máximo de una columna


(Nombre de la tabla = Estudiante, Nombre de la columna = marca)

select * from(select row_number() over (order by mark desc) as t,mark from student group by mark) as td where t=4


(TableName = Student, ColumnName = Mark):

select * from student where mark=(select mark from(select row_number() over (order by mark desc) as t, mark from student group by mark) as td where t=2)


Aquí hay un método para Oracle. Este ejemplo obtiene el noveno valor más alto. Simplemente reemplace el 9 con una variable de enlace que contenga la posición que está buscando.

select created from ( select created from ( select created from user_objects order by created desc ) where rownum <= 9 order by created asc ) where rownum = 1

Si quisiera el enésimo valor único, agregaría DISTINCT en el bloque de consulta más interno.


Considere la siguiente tabla de Empleados con una sola columna para el salario.

+------+ | Sal | +------+ | 3500 | | 2500 | | 2500 | | 5500 | | 7500 | +------+

La siguiente consulta devolverá el N-ésimo elemento Máximo.

select SAL from EMPLOYEE E1 where (N - 1) = (select count(distinct(SAL)) from EMPLOYEE E2 where E2.SAL > E1.SAL )

Por ej. cuando se requiere el segundo valor máximo,

select SAL from EMPLOYEE E1 where (2 - 1) = (select count(distinct(SAL)) from EMPLOYEE E2 where E2.SAL > E1.SAL )

+------+ | Sal | +------+ | 5500 | +------+


Creo que la consulta a continuación funcionará perfectamente en Oracle sql ... Lo he probado yo mismo ...

Información relacionada con esta consulta: esta consulta utiliza dos tablas llamadas employee y department con columnas en employee named: name (nombre del empleado), dept_id (común al empleado y departamento), salary

Y columnas en la tabla de departamento: dept_id (común para la tabla de empleados también), dept_name

SELECT tab.dept_name,MIN(tab.salary) AS Second_Max_Sal FROM ( SELECT e.name, e.salary, d.dept_name, dense_rank() over (partition BY d.dept_name ORDER BY e.salary) AS rank FROM department d JOIN employee e USING (dept_id) ) tab WHERE rank BETWEEN 1 AND 2 GROUP BY tab.dept_name

Gracias


De nuevo, es posible que necesite corregir su base de datos, pero si desea el segundo valor superior en un conjunto de datos que potencialmente tiene el valor duplicado, también querrá hacer un grupo:

SELECT column FROM table WHERE column IS NOT NULL GROUP BY column ORDER BY column DESC LIMIT 5 OFFSET 2;

Saltaría los primeros dos, y luego te conseguirá los próximos cinco más altos.


Empleado de mesa

salary 1256 1256 2563 8546 5645

Encuentra el segundo valor máximo por esta consulta

select salary from employee where salary=(select max(salary) from employee where salary <(select max(salary) from employee));

Encuentra el tercer valor máximo por esta consulta

select salary from employee where salary=(select max(salary) from employee where salary <(select max(salary) from employee where salary <(select max(salary)from employee)));


En SQL Server, simplemente hazlo:

select distinct top n+1 column from table order by column desc

Y luego tira el primer valor, si no lo necesitas.


Esta es una consulta para obtener el n-más alto de colomn puesto n = 0 para el segundo más alto y n = 1 para el tercero más alto y así sucesivamente ...

SELECT * FROM TableName WHERE ColomnName<(select max(ColomnName) from TableName)-n order by ColomnName desc limit 1;


MySQL:

select distinct(salary) from employee order by salary desc limit (n-1), 1;


No especificó qué base de datos, en MySQL puede hacer

SELECT column FROM table ORDER BY column DESC LIMIT 7,10;

Omitiría los primeros 7 y luego obtendría los siguientes diez más altos.


Otro para Oracle usando funciones analíticas:

select distinct col1 --distinct is required to remove matching value of column from ( select col1, dense_rank() over (order by col1 desc) rnk from tbl ) where rnk = :b1


Puede encontrar el enésimo valor más grande de la columna usando la siguiente consulta:

SELECT * FROM TableName a WHERE n = (SELECT count(DISTINCT(b.ColumnName)) FROM TableName b WHERE a.ColumnName <=b.ColumnName);


Puede ordenar la columna en formato descendente y luego simplemente obtener el valor de la enésima fila.

EDITAR::

Actualizado según la solicitud de comentarios. ¡ADVERTENCIA completamente no probada!

SELECT DOB FROM (SELECT DOB FROM USERS ORDER BY DOB DESC) WHERE ROWID = 6

Algo como lo anterior debería funcionar para Oracle ... ¡es posible que primero tenga que obtener la sintaxis!


Puedes simplificar así

SELECT MIN(Sal) FROM TableName WHERE Sal IN (SELECT TOP 4 Sal FROM TableName ORDER BY Sal DESC)

Si el Sal contiene valores duplicados, utiliza esto

SELECT MIN(Sal) FROM TableName WHERE Sal IN (SELECT distinct TOP 4 Sal FROM TableName ORDER BY Sal DESC)

el 4 será enésimo valor, puede ser cualquier valor más alto, como 5 o 6, etc.


Puro SQL (nota: recomendaría el uso de características SQL específicas para su DBMS, ya que es probable que sea más eficiente). Esto te dará el n + 1º valor más grande (para obtener el más pequeño, voltea el <). Si tiene duplicados, hágala COUNT (VALOR DISTINTO) ..

select id from table order by id desc limit 4 ; +------+ | id | +------+ | 2211 | | 2210 | | 2209 | | 2208 | +------+ SELECT yourvalue FROM yourtable t1 WHERE EXISTS( SELECT COUNT(*) FROM yourtable t2 WHERE t1.id <> t2.id AND t1.yourvalue < t2.yourvalue HAVING COUNT(*) = 3 ) +------+ | id | +------+ | 2208 | +------+


Respuesta: segundo lugar:

select * from (select * from deletetable where rownum <=2 order by rownum desc) where rownum <=1


Simplemente busqué esta pregunta cuando busqué la respuesta yo mismo, y parece que esto funciona para SQL Server 2005 (derivado de la solución de Blorgbeard ):

SELECT MIN(q.col1) FROM ( SELECT DISTINCT TOP n col1 FROM myTable ORDER BY col1 DESC ) q;

Efectivamente, ese es un SELECT MIN(q.someCol) FROM someTable q , con la n superior de la tabla recuperada por la consulta SELECT DISTINCT...


para SQL 2005:

SELECT col1 from (select col1, dense_rank(col1) over (order by col1 desc) ranking from t1) subq where ranking between 2 and @n


Simple SQL Query para obtener el detalle del empleado que tiene Nth MAX Salary en la tabla Employee .

sql> select * from Employee order by salary desc LIMIT 1 OFFSET <N - 1>;

Considere la estructura de la tabla como:

Empleado (id [int clave primaria auto_increment], nombre [varchar (30)], salario [int]);

Ejemplo:

Si necesita el 3er salario MAX en la tabla anterior, la consulta será:

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 2;

Similar:

Si necesita el 8º salario MAX en la tabla anterior, la consulta será:

sql> select * from Employee order by salary desc LIMIT 1 OFFSET 7;

NOTA: Cuando debe obtener el valor Nth MAX , debe OFFSET el OFFSET como (N - 1) .

De esta manera puede hacer el mismo tipo de operación en caso de salario en orden ascendente.


SELECT * FROM tablename WHERE columnname<(select max(columnname) from tablename) order by columnname desc limit 1


Select max(sal) from table t1 where N (select max(sal) from table t2 where t2.sal > t1.sal)

Para encontrar la Nth max sal.


Select min(fee) from fl_FLFee where fee in (Select top 4 Fee from fl_FLFee order by 1 desc)

Cambiar el número cuatro con N.


select sal,ename from emp e where 2=(select count(distinct sal) from emp where e.sal<=emp.sal) or 3=(select count(distinct sal) from emp where e.sal<=emp.sal) or 4=(select count(distinct sal) from emp where e.sal<=emp.sal) order by sal desc;


select column_name from table_name ordered by column_name desc limit n-1,1;

donde n = 1, 2, 3, .... nth valor máximo.