PostgreSQL функция count — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном пособии вы узнаете, как использовать PostgreSQL функцию count с синтаксисом и примерами.

Описание

Функция count PostgreSQL возвращает количество выражений.

Синтаксис

Синтаксис функции count в PostgreSQL:

SELECT count(aggregate_expression)
FROM tables
[WHERE conditions];

Или синтаксис функции count при группировке результатов по одному или нескольким столбцам:

SELECT expression1, expression2,… expression_n,
count(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2,… expression_n;

Параметры или аргументы

expression1, expression2,… expression_n
Выражения, которые не заключены в функцию count и должны быть включены в оператор GROUP BY в конце SQL-запроса.
aggregate_expression
Это столбец или выражение, чьи ненулевые значения будут учитываться.
tables
Таблицы, из которых вы хотите получить записи. В операторе FROM должна быть указана хотя бы одна таблица.
WHERE conditions
Необязательный. Это условия, которые должны быть соблюдены для выбора записей.

Включает только значения NOT NULL

Не все это понимают, но функция count будет включать в счет только записи, в которых значение expression в count(expression) равно NOT NULL. Когда expression содержит значение NULL, оно не включается в вычисления count.
Рассмотрим пример функции count, который демонстрирует, как значения NULL оцениваются функцией count.
Например, если у вас есть следующая таблица с именем suppliers:

supplier_idsupplier_namestate
1IBMCA
2Microsoft
3NVIDIA

И если вы запустили следующий оператор SELECT, которая использует функцию count:

SELECT count(supplier_id) FROM suppliers; —Результат: 3

SELECT count(supplier_id)

  FROM suppliers;

 

—Результат: 3

Этот пример count вернет 3, так как все значения supplier_id в результирующем наборе запроса не равны NULL
Однако, если вы запустили следующий оператор SELECT, которая использует функцию count:

SELECT count(state) FROM suppliers; —Результат: 1

SELECT count(state)

  FROM suppliers;

 

—Результат: 1

В этом примере count будет возвращать только 1, поскольку только одно значение state в результирующем наборе запроса NOT NULL. Это будет первая строка, где state = ‘CA’. Это единственная строка, которая включена в расчет функции count.

Применение

Функция count может использоваться в следующих версиях PostgreSQL:

  • PostgreSQL 11, PostgreSQL 10, PostgreSQL 9.6, PostgreSQL 9.5, PostgreSQL 9.4, PostgreSQL 9.3, PostgreSQL 9.2, PostgreSQL 9.1, PostgreSQL 9.0, PostgreSQL 8.4

Пример — с одним выражением

Рассмотрим некоторые примеры функций count, чтобы понять, как использовать функцию count в PostgreSQL.
Например, вам может потребоваться узнать количество записей из таблицы products, которые имеют product_type ‘Hardware’

SELECT count(*) AS «Number of products» FROM products WHERE product_type = ‘Hardware’;

SELECT count(*) AS «Number of products»

FROM products

WHERE product_type = ‘Hardware’;

В этом примере функции count мы назвали выражение count(*) как «Number of products». В результате, «Number of products» будет отображаться как имя поля при возвращении набора результатов.

Пример — использование DISTINCT

Вы можете использовать оператор DISTINCT в функции count. Например, приведенный ниже оператор SQL возвращает количество уникальных department (отделов), в которых хотя бы один сотрудник зарабатывает более 35000 $ в год.

SELECT count(DISTINCT department) AS «Unique departments» FROM employees WHERE salary > 35000;

SELECT count(DISTINCT department) AS «Unique departments»

FROM employees

WHERE salary > 35000;

Опять же, поле count(DISTINCT department) имеет псевдоним «Unique departments». Это имя поля, которое будет отображаться в результирующем наборе.

Пример — использование GROUP BY

В некоторых случаях вам потребуется использовать оператор GROUP BY с функцией count.
Например, вы также можете использовать функцию count, чтобы вернуть записи с department (название отдела) и «Number of employees» (количество сотрудников в соответствующем отделе), зарплата которых, составляют более 40000 $ США в год.

SELECT department, count(*) AS «Number of employees» FROM employees WHERE salary > 40000 GROUP BY department;

SELECT department, count(*) AS «Number of employees»

FROM employees

WHERE salary > 40000

GROUP BY department;

Поскольку в вашем операторе SELECT указан один столбец, который не инкапсулирован в функции count, необходимо использовать оператор GROUP BY. Поэтому поле department должно быть указано в операторе GROUP BY.

sql — Выбор COUNT (*) с DISTINCT

спросил

Изменено сегодня

Просмотрено 1,4 млн раз

В SQL Server 2005 у меня есть таблица cm_production , в которой перечислены все коды, запущенные в производство. Таблица имеет номер ticket_number , program_type

, program_name и push_number вместе с некоторыми другими столбцами.

ЦЕЛЬ: Подсчитать все названия программ DISTINCT по типу программы и номеру push-уведомления.

На данный момент у меня есть:

 DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];
SELECT DISTINCT COUNT(*) AS Count, program_type AS [Тип]
ОТ cm_production
ГДЕ push_number=@push_number
СГРУППИРОВАТЬ ПО типу_программы
 

Это подводит меня к цели, но она считает все имена программ, а не отдельные (чего я не ожидаю в этом запросе). Я думаю, я просто не могу понять, как сказать ему подсчитывать только отдельные имена программ, не выбирая их. Или что-то.

  • sql
  • sql-сервер
  • sql-сервер-2005
  • tsql

Подсчитайте все имена программ DISTINCT по типу программы и нажмите номер

 SELECT COUNT(DISTINCT имя_программы) AS Count,
  program_type AS [Тип]
ОТ cm_production
ГДЕ push_number=@push_number
СГРУППИРОВАТЬ ПО типу_программы
 

DISTINCT COUNT(*) вернет строку для каждого уникального счетчика. Вам нужно COUNT(DISTINCT ) : оценивает выражение для каждой строки в группе и возвращает количество уникальных ненулевых значений.

1

Мне нужно было получить количество вхождений каждого отдельного значения. Столбец содержал информацию о регионе. В итоге я получил простой SQL-запрос:

 SELECT Region, count(*)
ИЗ товара
ГДЕ Регион не является нулевым
ГРУППА ПО РЕГИОНАМ
 

Что даст мне список, например:

 Регион, количество
Дания, 4
Швеция, 1
США, 10
 
1

Вы должны создать производную таблицу для отдельных столбцов, а затем запросить количество из этой таблицы:

 SELECT COUNT(*)
ОТ (ВЫБЕРИТЕ РАЗЛИЧНЫЕ столбец 1, столбец 2
      ОТ имя_таблицы
      ГДЕ условие ) как dt
 

Здесь dt — производная таблица.

2

 SELECT COUNT(DISTINCT имя_программы) AS Count, тип_программы AS [Тип]
ОТ cm_production
ГДЕ push_number=@push_number
СГРУППИРОВАТЬ ПО типу_программы
 
1

попробуйте это:

 ВЫБЕРИТЕ
    COUNT(имя_программы) AS [Количество],тип_программы AS [Тип]
    ОТ (ВЫБЕРИТЕ РАЗЛИЧНЫЕ имя_программы,тип_программы
              ОТ cm_production
              ГДЕ push_number=@push_number
         ) дт
    СГРУППИРОВАТЬ ПО типу_программы
 

Вы можете попробовать следующий запрос.

 ВЫБЕРИТЕ столбец 1, СЧЕТЧИК (*) КАК Счетчик
ОТ имя_таблицы, где дата создания >
= '2022-07-01'::группа дат по столбцу1

Чтобы подсчитать различные имена программ по типу программы и номеру отправки в SQL Server 2005, вы можете использовать подзапрос, чтобы сначала выбрать различные имена программ, а затем выполнить подсчет во внешнем запросе. Вот пример запроса, который должен дать желаемый результат:

 DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];
SELECT COUNT(DISTINCT имя_программы) AS Count, тип_программы AS [Тип]
ОТ (
    SELECT DISTINCT имя_программы, тип_программы
    ОТ cm_production
    ГДЕ push_number = @push_number
) AS подзапрос
СГРУППИРОВАТЬ ПО типу_программы;
 

В этом запросе подзапрос выбирает отдельные имена программ и типы программ из таблицы cm_production на основе указанного push_number. Затем во внешнем запросе вы выполняете подсчет различных имен программ и группируете результаты по типу программы.

Кстати, с помощью dbForge Studio для SQL Server вы можете легко писать, выполнять и анализировать ваши SQL-запросы.

Это хороший пример, когда вы хотите получить количество PIN-кодов, хранящихся в последнем поле адреса 9.0005

 ВЫБЕРИТЕ ОТЛИЧНЫЙ
    НАПРАВО (адрес, 6),
    count(*) КАК считать
ОТ
    файл данных
ГДЕ
    адрес НЕ НУЛЬ
ГРУППА ПО
    НАПРАВО (адрес, 6)
 

SQL для поиска количества различных значений в столбце

спросил

Изменено 2 месяца назад

Просмотрено 733 тыс. раз

Я могу выбрать все различные значения в столбце следующими способами:

  • SELECT DISTINCT имя_столбца ИЗ имя_таблицы;
  • ВЫБРАТЬ имя_столбца ИЗ имя_таблицы ГРУППИРОВАТЬ ПО имени_столбца;

Но как мне получить количество строк из этого запроса? Требуется ли подзапрос?

  • sql
  • отдельный
1

Вы можете использовать DISTINCT ключевое слово в агрегатной функции COUNT :

 SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name
 

При этом будут учитываться только уникальные значения для этого столбца.

3

Это даст вам ОБА отдельные значения столбца и количество каждого значения. Обычно я обнаруживаю, что хочу знать обе части информации.

 ВЫБЕРИТЕ [имя_столбца], count([имя_столбца]) КАК CountOf
ОТ [имя_таблицы]
СГРУППИРОВАТЬ ПО [название столбца]
 
0

Сумма sql уникальных значений имени_столбца, отсортированных по частоте:

 ВЫБЕРИТЕ имя_столбца, СЧЕТ(*) ИЗ имя_таблицы ГРУППИРОВАТЬ ПО имени_столбца ORDER BY 2 DESC;
 
0

Имейте в виду, что Count() игнорирует значения null, поэтому, если вам нужно разрешить null как отдельное значение, вы можете сделать что-то хитрое, например:

 select count(distinct my_col)
       + count (отличный случай, когда my_col равен нулю, а затем 1, иначе конец равен нулю)
из my_table
/
 
4

 SELECT COUNT(DISTINCT имя_столбца) ИЗ таблицы как количество_столбцов;
 

вы должны посчитать этот отдельный столбец, а затем дать ему псевдоним.

 выберите количество (*) из
(
ВЫБЕРИТЕ отдельный столбец 1, столбец 2, столбец 3, столбец 4 ИЗ abcd
) Т
 

Это даст количество отдельных групп столбцов.

 выберите Count (отличное имя столбца) как columnNameCount из tableName
 
0

Используя следующий SQL, мы можем получить число различных значений столбца в Oracle 11g.

 выберите количество (различное (имя_столбца)) из имени таблицы
 

После MS SQL Server 2012 вы также можете использовать функцию окна.

 SELECT имя_столбца, COUNT(имя_столбца) OVER (РАЗДЕЛЕНИЕ ПО имени_столбца)
ОТ имя_таблицы
СГРУППИРОВАТЬ ПО имя_столбца
 

Чтобы сделать это в Presto, используйте OVER :

 SELECT DISTINCT my_col,
                count(*) OVER (PARTITION BY my_col
                               ORDER BY my_col) AS num_rows
ОТ my_tbl
 

Использование этого подхода на основе OVER , конечно, необязательно. В приведенном выше SQL я обнаружил, что необходимо указать DISTINCT и ORDER BY .

Предостережение. Согласно документации, использование GROUP BY может быть более эффективным.

 выберите количество (различное (имя_столбца)) AS columndatacount из имени_таблицы, где некоторое условие = истина
 

Вы можете использовать этот запрос для подсчета различных данных.

Без использования DISTINCT вот как мы могли бы это сделать-

 ВЫБЕРИТЕ СЧЕТ(С)
ОТ (ВЫБЕРИТЕ СЧЕТ(имя_столбца) как C
ОТ имя_таблицы
СГРУППИРОВАТЬ ПО имя_столбца)
 

Вы можете это сделать.

 Выберите отдельный PRODUCT_NAME_X
,количество (название_продукта) products_#
из таблицы X
Группа по PRODUCT_NAME
 

Он вернет

 продуктов PRODUCT_NAME
ХХХХХХХХХ 4760
 

Count(distinct({fieldname})) является избыточным

Просто Count({fieldname}) дает вам все уникальные значения в этой таблице. Он не будет (как многие предполагают) просто дать вам количество таблицы [т. е. НЕ то же самое, что Count(*) из таблицы]

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.