6

Выбор COUNT(*) с DISTINCT

1

У меня есть проблема с запросом в SQL Server 2005. У меня есть таблица cm_production, в которой перечислены все коды, которые были выставлены в продакшен. Таблица содержит столбцы ticket_number, program_type, program_name и push_number, а также несколько других столбцов.

ЦЕЛЬ: Посчитать все DISTINCT имена программ по типу программы и номеру пуша.

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

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] FROM cm_production WHERE push_number=@push_number GROUP BY program_type

Однако этот запрос возвращает общее количество, не учитывая DISTINCT имена программ, что, как я понимаю, не должно происходить в этом запросе. Я не могу понять, как заставить его считать только DISTINCT имена программ, не выбирая их напрямую. Может, есть что-то, что я упускаю?

5 ответ(ов)

1

Для получения количества вхождений каждого уникального значения в столбце, содержащем информацию о регионах, я использовал следующий простой SQL-запрос:

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region

Этот запрос возвратит список, например, в следующем формате:

Region, count
Дания, 4
Швеция, 1
США, 10

Таким образом, вы получите количество записей для каждого региона, игнорируя нулевые значения.

1

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

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1, column2
      FROM tablename  
      WHERE condition) AS dt

Где dt — это производная таблица.

0

В приведенном вами SQL-запросе выполняется подсчет уникальных названий программ (program_name) для определенного номера пуша (push_number), сгруппированных по типу программ (program_type).

Запрос:

SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
  1. COUNT(DISTINCT program_name): Эта часть подсчитывает количество уникальных наименований программ в наборах данных, которые соответствуют указанному номеру пуша.
  2. FROM cm_production: Данные извлекаются из таблицы cm_production.
  3. WHERE push_number=@push_number: Условие фильтрует записи, оставляя только те, которые имеют указанный номер пуша (параметр @push_number).
  4. GROUP BY program_type: Результаты агрегируются по типу программы, что означает, что для каждого уникального значения program_type будет возвращено количество уникальных наименований программ.

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

0

В вашем SQL-запросе вы пытаетесь посчитать количество уникальных названий программ, сгруппированных по типу программы, для определённого push_number. Ваш запрос можно немного упростить и сделать более читабельным. Попробуйте следующий вариант:

SELECT
    COUNT(DISTINCT program_name) AS [Count],
    program_type AS [Type]
FROM
    cm_production
WHERE
    push_number = @push_number
GROUP BY
    program_type

В этом запросе мы используем COUNT(DISTINCT program_name) непосредственно в основном запросе, что делает его более эффективным и понятным. Мы по-прежнему группируем результаты по program_type, чтобы получить количество уникальных программ для каждого типа. Убедитесь, что параметр @push_number правильно передан в запрос.

0

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

SELECT column1, COUNT(*) AS Count
FROM tablename
WHERE createddate >= '2022-07-01'::date
GROUP BY column1;

Данный запрос выбирает значения из column1 и считает количество записей для каждой группы, у которых дата создания (createddate) больше или равна 1 июля 2022 года. Не забудьте заменить tablename на название вашей таблицы.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь