PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Еквивалент на PostgreSQL за TOP n WITH TIES:LIMIT с връзки?

Postgres 13 накрая добавя WITH TIES . Вижте:

  • По-голяма или равна на ALL() и равна на MAX() скорост

Няма WITH TIES клауза до PostgreSQL 12, както има в SQL Server.
В PostgreSQL бих заменил това с 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;

За да бъде ясно, rank() е прав, dense_rank() би било погрешно (връща твърде много редове).
Помислете за този цитат от документите на SQL Server (от връзката по-горе):

Например, ако изразът е зададен на 5, но 2 допълнителни реда съвпадат със стойностите на колоните ORDER BY в ред 5, резултантният набор ще съдържа 7 реда.

Работата на WITH TIES е да включите всички партньори от последния ред в горния n както е дефинирано от ORDER BY клауза. rank() дава абсолютно същия резултат.

За да се уверя, тествах със SQL сървър, ето демонстрация на живо.
И тук е по-удобен SQLfiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да импортирам данни от CSV в таблица на Postgres с помощта на pgAdmin 3?

  2. 7 съвета за най-добри практики за групово зареждане на PostgreSQL данни

  3. Сървърът работи ли на хост localhost (::1) и приема ли TCP/IP връзки на порт 5432?

  4. Homebrew postgres е счупен

  5. Как да показвате нулеви стойности при изпълнение на заявки в psql (PostgreSQL)