sql >> Database teknologi >  >> RDS >> PostgreSQL

Saml kolonner med yderligere (særskilte) filtre

Det samlede FILTER klausul i Postgres 9.4 eller nyere er kortere og hurtigere:

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;
  • Manualen
  • Postgres Wiki
  • Depesz blogindlæg

I Postgres 9.3 (eller enhver version) dette er stadig kortere og hurtigere end indlejrede undervalg eller CASE udtryk:

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;

Detaljer:

  • Er SUM hurtigere eller COUNT for absolut ydeevne?


  1. Sådan filtreres objekter i SQL Server Management Studio (SSMS) - SQL Server / TSQL vejledning del 19

  2. SQL Server 2016 Temporal Table Query Plan Behavior

  3. Forskellige måder at se tabeller på i MySQL Server

  4. Sammenfletning af datafiler med Statistica, del 2