"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿PostgreSQL admite la funcionalidad `top n con lazos '?

¿PostgreSQL admite la funcionalidad `top n con lazos '?

Publicado el 2025-03-24
Navegar:799

Does PostgreSQL Support `TOP n WITH TIES` Functionality?

Limit con lazos: ¿PostgreSQL lo implementó?

en SQL Server, la sintaxis superior n con lazos recupera las primeras n filas junto con cualquier lluvia atada. Sin embargo, los usuarios de PostgreSQL pueden estar preguntándose si hay una sintaxis equivalente.

Solución de PostgreSQL: con lazos (Postgresql 13)

comenzando con Postgresql 13, se introdujo la cláusula con ties. Esta cláusula se comporta de manera similar a su contraparte de SQL Server, obteniendo las filas superiores n más cualquier fila atada.

alternativa para Postgresql 12 y más

antes de Postgresql 13, no había un equivalente directo de Top n con los enlaces. Una solución es ejecutar la siguiente consulta:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY ) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk  

aquí, rango () asigna cada fila un rango, y las filas atadas para el último rango n están incluidos.

ejemplo

considere un número de tabla con valores {10, 9, 8, 8, 2}. La siguiente consulta devolvería {10, 9, 8, 8} usando el método alternativo para PostgreSQL 12 y más:

WITH cte AS (
   SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk
   FROM   Numbers
   )
SELECT *
FROM   cte
WHERE  rnk  

nota: la función rank () utilizada en esta alternativa es diferente de dense_rank (), ya que este último produciría resultados incorrectos devolviendo demasiadas filas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3