Question

Je suis à la recherche de quelque chose de similaire dans SQL Server:

SELECT TOP n WITH TIES FROM tablename

Je sais que sur LIMIT dans PostgreSQL, mais ne l'équivalent de la ci-dessus existent?Je suis juste curieux que cela permettrait d'économiser une requête supplémentaire à chaque fois pour moi.

Si j'ai une table Numbers avec l'attribut nums: {10, 9, 8, 8, 2}.Je veux faire quelque chose comme:

SELECT nums FROM Numbers ORDER BY nums DESC LIMIT *with ties* 3

Il devrait revenir {10, 9, 8, 8} parce qu'il prend le top 3 ainsi que les extra 8 depuis il relie l'autre.

Était-ce utile?

La solution

Il n'y a pas de WITH TIES la clause dans PostgreSQL comme il est dans SQL Server.
Dans PostgreSQL, je voudrais la remplacer pour TOP n WITH TIES .. ORDER BY <something>:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;

Pour être clair, rank() est droit, dense_rank() serait erroné (retour trop grand nombre de lignes).
Considérez cette citation de SQL Server docs (à partir du lien ci-dessus):

Par exemple, si l'expression est définie à 5 mais 2 lignes supplémentaires correspondent aux des valeurs de l'ORDRE des colonnes dans la ligne 5, le résultat contiendra 7 les lignes.

Le travail de WITH TIES est d'inclure tous les pairs de la dernière ligne du haut n tel que défini par la ORDER BY la clause. rank() donne exactement le même résultat.

Pour s'en assurer, j'ai testé avec SQL server, voici une démonstration en direct.
Et ici, c'est plus pratique SQLfiddle.

Autres conseils

Essayez ceci:

Sortie:10, 9, 8, 8

with numbers (nums) as (
  values (10), (9), (8), (8), (2)
) 
SELECT nums FROM Numbers 
WHERE nums in (SELECT DISTINCT nums FROM Numbers ORDER BY nums DESC LIMIT 3)
ORDER BY nums DESC

Sortie:10,10,9,8,8

with numbers (nums) as (
  values (10), (9), (8), (8), (2), (10)
) 
SELECT nums FROM Numbers 
WHERE nums in (SELECT DISTINCT nums FROM Numbers ORDER BY nums DESC LIMIT 3)
ORDER BY nums DESC
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top