sql >> Database >  >> RDS >> PostgreSQL

Voorwaardelijk aantal SQL's

Gebruik in Postgres 9.4 of hoger het geaggregeerde FILTER optie. Typisch schoonste en snelste:

SELECT category
     , count(*) FILTER (WHERE question1 = 0) AS zero
     , count(*) FILTER (WHERE question1 = 1) AS one
     , count(*) FILTER (WHERE question1 = 2) AS two
FROM   reviews
GROUP  BY 1;

Details voor de FILTER clausule:

  • Samengevoegde kolommen met extra (verschillende) filters

Als je het kort wilt hebben :

SELECT category
     , count(question1 = 0 OR NULL) AS zero
     , count(question1 = 1 OR NULL) AS one
     , count(question1 = 2 OR NULL) AS two
FROM   reviews
GROUP  BY 1;

Meer syntaxisvarianten:

  • Voor absolute prestaties, is SUM sneller of COUNT?

Juiste kruistabelquery

crosstab() levert de beste prestaties en is korter voor lange lijsten met opties:

SELECT * FROM crosstab(
     'SELECT category, question1, count(*) AS ct
      FROM   reviews
      GROUP  BY 1, 2
      ORDER  BY 1, 2'
   , 'VALUES (0), (1), (2)'
   ) AS ct (category text, zero int, one int, two int);

Gedetailleerde uitleg:

  • PostgreSQL-kruistabelquery


  1. Sla het queryresultaat op in een variabele met behulp van in PL/pgSQL

  2. Hoe u voorbereide afschriften gebruikt met Postgres

  3. Hoe de MySQL-opgeslagen procedure in Python aan te roepen?

  4. Hoe milliseconden tot nu toe te converteren in SQLite