Quiero encontrar segundo valor, 3rd..nth máximo de una columnaconsulta para buscar el valor máximo n de una columna
Respuesta
Se podría ordenar la columna en formato descendente y luego simplemente obtener el valor de la fila n.
EDITAR ::
Actualizado según la petición de comentario. ADVERTENCIA ¡completamente sin verificar!
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 tenga que obtener la sintaxis correctamente.
¿Puede proporcionar un fragmento de código? Intenté su sugerencia, pero no pude obtener el valor de la enésima fila. –
Usar 'ROWID' no es seguro ni práctico. Tomemos el caso de [tag: sqlite]. 'ROWID' puede o no generarse en serie.Además, el orden de 'ROWID' podría no coincidir con el de la columna solicitada. – Quirk
no especificó qué base de datos, en MySQL se puede hacer
SELECT column FROM table ORDER BY column DESC LIMIT 7,10;
saltaría el primer 7, y luego se obtiene la siguiente diez más alto.
Si está usando mysql, esto no funcionará en Oracle (o mssql creo) –
buen punto, lo aclaró – Pieter
En SQL Server, simplemente:
select distinct top n+1 column from table order by column desc
Y luego tirar el primer valor, si no lo necesita.
De nuevo es posible que necesite para arreglar para su base de datos, pero si desea que el segundo valor superior en un conjunto de datos que potencialmente ha duplicado el valor, tendrá que hacer un grupo, así:
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.
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 le dará el n + 1º valor más grande (para obtener el más pequeño, voltear el <). Si tiene duplicados, haga la cuenta (distinto valor) ..
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 |
+------+
Aquí es 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 quería el valor único de orden n, que sería un signo profundo en el bloque de consulta interna.
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
Otra para Oracle mediante 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
Sólo excavadas en esta pregunta en la búsqueda de la respuesta a mí mismo, y esto parece que funciona para SQL Server 2005 (derivado de Blorgbeard's solution):
SELECT MIN(q.col1) FROM (
SELECT
DISTINCT TOP n col1
FROM myTable
ORDER BY col1 DESC
) q;
Efectivamente, que es un SELECT MIN(q.someCol) FROM someTable q
, con la n superior de la tabla recuperada por la consulta SELECT DISTINCT...
.
Considere la siguiente tabla de empleados con una sola columna para el salario.
+------+ | Sal | +------+ | 3500 | | 2500 | | 2500 | | 5500 | | 7500 | +------+
La siguiente consulta arrojará el ené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 | +------+
¡Una solución fácil de usar en todas las bases de datos! ¡Bien pensado! :) – Sterex
¡Gran respuesta! Me he enfrentado a este problema antes y estaba preocupado acerca de cómo resolverlo sin ser específico de un proveedor :) Una posible desventaja es que hace una subconsulta para cada fila. – gaboroncancio
¡Esto es asombroso! Lo estoy usando con el operador '> =' para obtener todas las filas con hasta la posición Nth. Me gustaría agregarle un ranking, como '1' para el valor máximo, '2' para el segundo máximo, etc. ¿Tiene alguna idea de cómo hacerlo? – NurShomik
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 max(sal)
from table t1
where N (select max(sal)
from table t2
where t2.sal > t1.sal)
Para hallar el enésimo Sal máx.
SELECT * FROM tablename
WHERE columnname<(select max(columnname) from tablename)
order by columnname desc limit 1
MySQL:
select distinct(salary) from employee order by salary desc limit (n-1), 1;
empleado Tabla
salary
1256
1256
2563
8546
5645
obtendrán el segundo valor máximo de esta consulta
select salary
from employee
where salary=(select max(salary)
from employee
where salary <(select max(salary) from employee));
obtendrán 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)));
Los selects más externos son extraños. Detenerse en el primer máximo (salario) habría funcionado. – RichardTheKiwi
Esta solución es una locura. –
Respuesta: superior segundos:
select * from (select * from deletetable where rownum <=2 order by rownum desc) where rownum <=1
Cuando no agrega algo nuevo, no responda preguntas de 4 años :) – fancyPants
(Tabla Name = Estudiantes, Nombre de 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
MS SQL Server [row_number] (https://msdn.microsoft.com/en-us/library/ms186734.aspx) – woodvi
(TableName = Estudiantes, 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)
Puede encontrar el enésimo valor más grande de la columna mediante el uso de fo llowing consulta:
SELECT * FROM TableName a WHERE
n = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE a.ColumnName <=b.ColumnName);
creo que la consulta a continuación funcionará perfecto en SQL Oracle ... He probado yo mismo ..
información relacionada con esta consulta: esta consulta es el uso de dos tablas denominadas employee
y department
con columnas en el nombre del empleado: name
(nombre del empleado), dept_id
(común a los empleados y departamento), salary
y columnas en la tabla departamento: dept_id
(comunes para la tabla de empleados, así), 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
Select min(fee)
from fl_FLFee
where fee in (Select top 4 Fee from fl_FLFee order by 1 desc)
Número de cambio de cuatro con N.
Se puede simplificar como este
SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT TOP 4 Sal FROM TableName ORDER BY Sal DESC)
Si la Sal contiene valores duplicados luego utilizan esta
SELECT MIN(Sal) FROM TableName
WHERE Sal IN
(SELECT distinct TOP 4 Sal FROM TableName ORDER BY Sal DESC)
el 4 habrá valor enésimo fuere cualquier valor más alto como 5 o 6 etc.
Esta es la consulta para obtener el n-más alto de colomn put 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;
simple consulta SQL para obtener el detalle de la persona que tiene enésima MAX Salary
en la tabla Employee
.
sql> select * from Employee order by salary desc LIMIT 1 OFFSET <N - 1>;
Considere estructura de la tabla como:
Empleado ( ID [int primaria auto_increment] sin nombre [varchar (30)], salario [int]);
Ejemplo:
Si necesita tercera MAX
salario en la tabla anterior, entonces, la consulta será:
sql> select * from Employee order by salary desc LIMIT 1 OFFSET 2;
mismo modo:
Si necesita octavo MAX
salario en la tabla anterior, la consulta será:
sql> select * from Employee order by salary desc LIMIT 1 OFFSET 7;
NOTA: Cuando usted tiene que conseguir el enésimo
MAX
valor debe darle laOFFSET
como (N - 1).
Así se puede hacer el mismo tipo de operación en caso de salario en orden ascendente.
select column_name from table_name
ordered by column_name desc limit n-1,1;
donde n = 1, 2, 3, .... valor max nth.
upvoted para sugerir la sintaxis de coma límite. –
En PostgreSQL, para encontrar el N-ésimo salario más grande de la tabla Empleado.
SELECT * FROM Employee WHERE salary in
(SELECT salary FROM Employee ORDER BY salary DESC LIMIT N)
ORDER BY salary ASC LIMIT 1;
- 1. ¿Cómo modifico esta consulta t-sql para devolver el valor máximo para diferentes nombres de columna?
- 2. Usar el valor máximo de la columna en orden por
- 3. Encontrar el valor máximo en la columna de la tabla
- 4. seleccionar el nombre de la columna de consulta máximo
- 5. Filtrando la consulta de Django por el registro con el valor de columna máximo
- 6. Buscar valor mínimo en una columna
- 7. Obtener el valor máximo para la columna de identidad sin una exploración de tabla
- 8. Encontrar el valor máximo en una columna con GQL
- 9. Oracle consulta a buscar nombres de columna
- 10. valor máximo de devolución si consulta vacía
- 11. buscar la fila o columna que contiene el valor máximo en la matriz numpy
- 12. ¿Cómo consulta una columna int para cualquier valor?
- 13. Buscar si el valor en la columna A contiene el valor de la columna B?
- 14. Obtener el valor máximo de una columna en la base de datos MySQL
- 15. consulta de Escritura de SQL para obtener la máxima ocurrencia de un valor en una columna
- 16. consulta SQL Server agrupados por valor máximo en la columna de
- 17. pandas - Obtener mayor valor reciente de una columna en particular indexado por otra columna (obtener el valor máximo de una columna en particular indexado por otra columna)
- 18. Ruby on Rails: obtener el valor máximo de una columna DB
- 19. Consulta SQL para devolver N filas de
- 20. Cómo seleccionar filas de MySQL según el valor máximo de una columna + agrupación
- 21. Valor máximo de columna de identidad en SQLite DBs
- 22. Consulta de SQL Server 2008 para buscar filas que contengan caracteres no alfanuméricos en una columna
- 23. ¿Cómo encontrar el n el valor más alto de una columna?
- 24. ¿Cómo se obtiene el valor máximo de una columna única de identificación utilizando LINQ
- 25. SQL Selección de múltiples columnas basadas en el valor máximo en una columna
- 26. ¿Cómo obtener el valor máximo de una columna con Entity Framework?
- 27. Buscar elementos N superiores en una matriz
- 28. ¿Cómo se puede hacer una consulta de "máximo n por grupo" en django?
- 29. Valor predeterminado para una columna de texto
- 30. Buscar máximo en el diccionario anidado
demasiado genérico Creo: especifique al menos en qué DBMS ... – ila
¿Qué base de datos? No creo que haya una buena solución "genérica" para este problema. –