PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy istnieje odpowiednik Postgresql KAŻDEJ funkcji agregującej w innych RDBMS?

Emulowanie EVERY() z CASE i SUM()

W rzeczywistości ten artykuł opisuje, jak EVERY() może być emulowany przez CASE i SUM() . Następujące dwa stwierdzenia są równoważne:

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;

To samo dotyczy EVERY() funkcja okna:

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;

Standard SQL

SQL:2008 standard wspomina o EVERY funkcja agregująca:

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
  | [...]

Jednak „zaawansowane” standardowe funkcje SQL nie są często implementowane przez bazy danych. Oracle 11g na przykład nie obsługuje go, podobnie jak SQL Server 2012 .

Z HSQLDB , jednak możesz mieć więcej szczęścia. HSQLDB 2.x jest bardzo zgodny ze standardami, także MySQL zna BIT_AND() funkcja agregująca, która jest niestandardowym aliasem do EVERY() , obsługiwane również przez Postgres.

Uwaga, niektóre bazy danych pozwalają na pisanie funkcji agregujących zdefiniowanych przez użytkownika, więc równie dobrze możesz zaimplementować EVERY() siebie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Całkowite ignorowanie stref czasowych w Rails i PostgreSQL

  2. Jak uzyskać odpowiednik polecenia postgres „nth_value” w pyspark Hive SQL?

  3. Spowodowane przez:org.postgresql.util.PSQLException:FATAL:pozostałe gniazda połączeń są zarezerwowane dla połączeń superużytkownika bez replikacji

  4. PostgreSQL:FATAL - Uwierzytelnienie peera nie powiodło się dla użytkownika (PG::ConnectionBad)

  5. Jak przełączać bazy danych w psql?