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

Podmíněný počet SQL

V Postgresu 9.4 nebo novějším použijte agregovaný FILTER volba. Obvykle nejčistší a nejrychlejší:

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;

Podrobnosti pro FILTER klauzule:

  • Agregujte sloupce pomocí dalších (odlišných) filtrů

Pokud to chcete krátké :

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;

Další varianty syntaxe:

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

Správný křížový dotaz

crosstab() poskytuje nejlepší výkon a je kratší pro dlouhé seznamy možností:

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

Podrobné vysvětlení:

  • PostgreSQL Crosstab Query


  1. PostgreSQL index se nepoužívá pro dotaz na rozsahy IP

  2. Porušení omezení UNIQUE KEY na INSERT WHERE COUNT(*) =0 na SQL Server 2005

  3. Jak používat distribuovanou AD ke zkrácení doby opravy v Oracle EBS

  4. Změňte sloupec MySQL tak, aby byl AUTO_INCREMENT