PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Условен SQL брой

В Postgres 9.4 или по-нова версия, използвайте обобщения FILTER опция. Обикновено най-чистият и бърз:

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;

Подробности за FILTER клауза:

  • Агрегирайте колони с допълнителни (отличителни) филтри

Ако искате да е кратко :

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;

Още варианти на синтаксис:

  • За абсолютна ефективност, SUM е по-бърз или COUNT?

Правилна кръстосана заявка

crosstab() дава най-добра производителност и е по-кратък за дълги списъци с опции:

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

Подробно обяснение:

  • PostgreSQL Crosstab Query


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - СЪЗДАВАНЕ НА ТАБЛИЦА ОТ SELECT

  2. Разрешението е отказано при опит за импортиране на CSV файл от PGAdmin

  3. Извършване на транзакции при изпълнение на функция postgreql

  4. Относно pglogical производителност

  5. Инсталирането на pip е неуспешно с /usr/bin/clang:Няма такъв файл или директория