sql >> Databasteknik >  >> RDS >> PostgreSQL

Villkorligt SQL-antal

I Postgres 9.4 eller senare, använd det samlade FILTER alternativ. Vanligtvis renast och snabbast:

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 för FILTER klausul:

  • Aggregera kolumner med ytterligare (distinkta) filter

Om du vill ha 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;

Fler syntaxvarianter:

  • För absolut prestanda, är SUM snabbare eller COUNT?

Rätt korstabellsfråga

crosstab() ger bäst prestanda och är kortare för långa listor med alternativ:

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

Detaljerad förklaring:

  • PostgreSQL Crosstab Query


  1. Handledning för SQL Server-tabellpartitionering och partitioner

  2. NULL i MySQL (prestanda och lagring)

  3. Vad betyder det att använda parenteser med ett OR i SQL?

  4. Bästa metoder:.NET:Hur returnerar man PK mot en oracle-databas?