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

Има ли някакъв еквивалент на Postgresql EVERY агрегатна функция на други RDBMS?

Емулиране на EVERY() с CASE и SUM()

Всъщност тази статия описва как EVERY() може да се емулира чрез CASE и SUM() . Следните две твърдения са еквивалентни:

SELECT EVERY(id < 10)
FROM book

SELECT CASE SUM(CASE WHEN id < 10 THEN 0 ELSE 1 END) 
         WHEN 0 THEN 1 
         ELSE 0 
       END
FROM book;

Същото важи и за EVERY() функция прозорец:

SELECT 
  book.*, 
  EVERY(title LIKE '%a') OVER (PARTITION BY author_id)
FROM book

SELECT
  book.*,
  CASE SUM(CASE WHEN title LIKE '%a' THEN 0 ELSE 1 END)
       OVER(PARTITION BY author_id)
    WHEN 0 THEN 1 
    ELSE 0
  END
FROM book;

SQL стандарт

SQL:2008 стандартът споменава EVERY агрегатна функция:

10.9 <aggregate function>

[...]

<aggregate function> ::=
  COUNT <left paren> <asterisk> <right paren> [ <filter clause> ]
  | <general set function> [ <filter clause> ]
  | <binary set function> [ <filter clause> ]
  | <ordered set function> [ <filter clause> ]

<general set function> ::=
  <set function type> <left paren> [ <set quantifier> ]
  <value expression> <right paren>

<set function type> ::=
  <computational operation>

<computational operation> ::=
  AVG
  | MAX
  | MIN
  | SUM
  | EVERY
  | [...]

Но „усъвършенстваните“ стандартни функции на SQL често не се изпълняват от бази данни. Oracle 11g например не го поддържа, нито SQL Server 2012 .

С HSQLDB , но може да имате повече късмет. HSQLDB 2.x е много съвместим със стандартите, също MySQL познава BIT_AND() агрегатна функция, която е нестандартен псевдоним на EVERY() , също поддържан от Postgres.

Имайте предвид, че някои бази данни позволяват писане на дефинирани от потребителя агрегатни функции, така че можете също така да приложите EVERY() себе си.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. regexp_replace Unicode в PostgreSQL

  2. предоставяне на сертификати към tomcat jndi връзка към postgresql

  3. По някакъв начин да направя `where booleanvalue=false` както на Sql Server, така и на PostgreSQL?

  4. Erlang и PostgreSQL

  5. @Tailable(spring-data-reactive-mongodb) еквивалент в spring-data-r2dbc