2009-10-05 4 views
279

В SQL Server 2005 у меня есть таблица cm_production, в которой перечислены все коды, которые были введены в эксплуатацию. В таблице есть имя_билета, program_type и имя_программы и push_number вместе с некоторыми другими столбцами.SQL Server query - выбор COUNT (*) с DISTINCT

ЦЕЛЬ: Граф все DISTINCT названия программ по типу программы и нажать номер

То, что я до сих пор:

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 

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

ответ

478

Граф все DISTINCT программные имена по типу программы и нажать номер

SELECT COUNT(DISTINCT program_name) AS Count, 
    program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 

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

+4

Спасибо. По какой-то причине я затрудняюсь концептуализировать SQL-запросы. Это прекрасно работает. – somacore

+4

Как я могу получить COUNT записей DISTINCT на основе более чем одного столбца? Я попытался сделать «SELECT COUNT (DISTINCT col1, col2)», но «COUNT», похоже, интерпретирует это как неправильное количество аргументов. –

+3

@Bepetersn: Я предлагаю вам задать отдельный вопрос –

13

попробовать это:

SELECT 
    COUNT(program_name) AS [Count],program_type AS [Type] 
    FROM (SELECT DISTINCT program_name,program_type 
       FROM cm_production 
       WHERE [email protected]_number 
     ) dt 
    GROUP BY program_type 
11
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE [email protected]_number 
GROUP BY program_type 
64

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

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

Что бы дать мне список, как, скажем:

Region, count 
Denmark, 4 
Sweden, 1 
USA, 10 
+1

В postgresql вы можете просто использовать 'count (*)', а не 'count (*) AS count'. – ogirginc

+0

hey @ Netsi1964 тот же запрос используется, но я хочу Region, State, Count, это возможно? Пожалуйста, помогите мне – 2017-10-31 09:07:05

18

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

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

здесь дт является временную таблицу

+0

Спасибо! Я использовал много SQL в моей жизни во многих базах данных, и это первый раз, когда я должен был квалифицировать его как временную таблицу с «как X». – Mmm

+2

Обратите внимание, что для терминов «dt» здесь используется таблица _derived_, а не временная таблица – 8forty

-5
select count (distinct NumTar),'PROPIAS' 
from ATM_TRANe with (nolock) 
where Fecha>='2014-01-01' 
    AND Fecha<='2015-05-31'and NetDestino=0 
    and SystemCodResp=0 
group by NetDestino 
union 
select sum (contar),'FORANEAS' 
from 
(
    select count(distinct NumTar) as contar 
    from ATM_TRANe with (nolock) 
    where Fecha>='2014-01-01' 
    AND Fecha<='2014-01-31' 
    and NetDestino!=0 
    and SystemCodResp=0 
    group by NetDestino 
)dt 
-1

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

SELECT DISTINCT 
    RIGHT (address, 6), 
    count(*) AS count 
FROM 
    datafile 
WHERE 
    address IS NOT NULL 
GROUP BY 
    RIGHT (address, 6)