PostgreSQL: считаем количество

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы подсчитать количество значений true в колонке PostgreSQL, воспользуйтесь этим запросом:

SQL
Скопировать код
SELECT COUNT(*) AS true_count FROM your_table WHERE your_column;

Такой запрос позволяет эффективно подсчитать строки, для которых значение your_column истинно, без необходимости преобразования типов или использования конструкции CASE.

Кинга Идем в IT: пошаговый план для смены профессии

Умные решения для нюансов

PostgreSQL предлагает гибкий инструментарий для работы со всеми типами значений: true, false и null.

Считаем null как false

Чтобы учесть в подсчёте записи со значением null, используйте функцию COALESCE:

SQL
Скопировать код
SELECT COUNT(*) AS total_rows, SUM(COALESCE(your_column, false)::int) AS true_count FROM your_table;

Отделяем true от false

Можно подсчитать количество значений true и false отдельно в одном запросе, используя фильтр FILTER:

SQL
Скопировать код
SELECT
  COUNT(*) AS total_rows,
  COUNT(*) FILTER (WHERE your_column) AS true_count,
  COUNT(*) FILTER (WHERE NOT your_column) AS false_count,
  COUNT(*) FILTER (WHERE your_column IS NULL) AS nulls
FROM your_table;

Применяем CASE для точности

Оператор CASE позволяет осуществить точный подсчёт:

SQL
Скопировать код
SELECT
  COUNT(CASE WHEN your_column THEN 1 END) AS true_count,
  COUNT(CASE WHEN NOT your_column THEN 1 END) AS false_count
FROM your_table;

Визуализация

Представим, что у нас есть сад, и нам нужно подсчитать количество деревьев, урожаи которых представлены (обозначены как true), и деревьев, не дающих урожай (обозначенных как false):

🌳= Плодоносное дерево (true) 🌲= Безплодное дерево (false)

Визуализация сада: 🌳 🌲 🌳 🌳 🌲 🌳 🌲 🌲 🌳 🌲

Подсчитываем плодоносные деревья (подсчёт true):

SQL
Скопировать код
SELECT COUNT(*) FROM Orchard WHERE Tree = '🌳';

Количество плодоносных деревьев: 🌳🌳🌳🌳🌳 (5). Это аналогично подсчёту true для данных!

Продвинутые тактики: Сложные подсчеты

Механизмы PostgreSQL позволяют создавать гибкие и сложные SQL-запросы для подсчёта значений.

Сложные выражения и обработка значений null

Составляйте сложные условные выражения для колонок, корректно обрабатывая значения null:

SQL
Скопировать код
SELECT COUNT(your_column OR NULL) AS true_including_nulls FROM your_table;

Заворотливое использование агрегатных функций

Подзапросы не нужны для агрегации разнородных условий:

SQL
Скопировать код
SELECT
  COUNT(*) AS total_rows,
  SUM((your_column AND another_condition)::int) AS conditional_true_count
FROM your_table;

Условные функции для точного подсчета

Документация PostgreSQL будет полезна, если вы планируете достичь точности в агрегатах:

SQL
Скопировать код
SELECT
  SUM(COALESCE(nullif(your_column, false), false)::int) AS true_count_also_counting_nulls_as_false
FROM your_table;

Используйте nullif для подсчёта значений true или false:

SQL
Скопировать код
SELECT
  COUNT(nullif(your_column, false)) AS true_count,
  COUNT(nullif(your_column, true)) AS false_count
FROM your_table;

Точность подсчета при сложных условиях

Условные выражения позволяют сохранять точность при подсчёте:

SQL
Скопировать код
SELECT
  SUM(CASE WHEN your_column AND complex_condition THEN 1 ELSE 0 END) AS complex_true_count
FROM your_table;

Искусство тонкостей подсчёта в Postgres

Овладеете техниками подсчёта PostgreSQL для более качественного составления запросов.

Применение преобразования типов для точности

Преобразование типов (::int) упрощает подсчёт значений true:

SQL
Скопировать код
SELECT COUNT(your_column::int) AS true_count FROM your_table;

Проверка точности агрегатных подсчетов

Методы, такие как COALESCE и CASE, прошли проверку временем и обеспечивают точные результаты:

SQL
Скопировать код
SELECT
  COUNT(CASE WHEN your_column IS NOT NULL AND your_column THEN 1 END) AS validated_true_count
FROM your_table;

Полезные материалы

  1. PostgreSQL: Документация: Агрегатные функции — основной ресурс для изучения агрегатных функций в PostgreSQL.
  2. Руководство по стилю SQL от Simon Holywell — помощник в написании чистого и удобного для поддержки SQL.
  3. SQL Indexing and Tuning e-Book — детальное руководство по индексации и оптимизации запросов для SQL-баз данных.
  4. Оптимизация производительности – вики PostgreSQL — стратегии и лучшие практики для оптимизации производительности в PostgreSQL.
  5. Списки рассылки PostgreSQL: pgsql-general — обсуждения и размышления сообщества по теме PostgreSQL.