sql >> Databáze >  >> RDS >> PostgreSQL

Souhrnné sloupce s dalšími (odlišnými) filtry

Souhrnný FILTER doložka v Postgres 9.4 nebo novější je kratší a rychlejší:

SELECT u.name
     , count(*) FILTER (WHERE g.winner_id  > 0)    AS played
     , count(*) FILTER (WHERE g.winner_id  = u.id) AS won
     , count(*) FILTER (WHERE g.winner_id <> u.id) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;
  • Příručka
  • Postgres Wiki
  • Příspěvek na blogu Depesz

V Postgres 9.3 (nebo jakýkoli verze) je stále kratší a rychlejší než vnořené dílčí výběry nebo CASE výrazy:

SELECT u.name
     , count(g.winner_id  > 0 OR NULL)    AS played
     , count(g.winner_id  = u.id OR NULL) AS won
     , count(g.winner_id <> u.id OR NULL) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;

Podrobnosti:

  • Pro absolutní výkon je rychlejší SUM nebo COUNT?


  1. Jak změnit kódování kolekce šablon databáze

  2. Instalace SQL Server 2017

  3. SQL Natural Join

  4. Analyzujte velká data pomocí nástrojů Microsoft Azure