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

Betinget SQL-antal

I Postgres 9.4 eller nyere skal du bruge det samlede FILTER mulighed. Typisk reneste og hurtigste:

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;

Detaljer for FILTER klausul:

  • Samlet kolonner med yderligere (særskilte) filtre

Hvis du vil have det kort :

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;

Flere syntaksvarianter:

  • Er SUM hurtigere eller COUNT for absolut ydeevne?

Korrekt krydstabuleringsforespørgsel

crosstab() giver den bedste ydeevne og er kortere for lange lister af muligheder:

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);

Detaljeret forklaring:

  • PostgreSQL krydstabulatorforespørgsel


  1. mysql-lignende præstationsboost

  2. En løsning til:Markører understøttes ikke på en tabel, som har et klynget kolonnelagerindeks

  3. WordPress – Bag kulisserne, del 2

  4. ORA-00904:ugyldig identifikator