SQL Server 쿼리-DISTINCT를 사용하여 COUNT (*) 선택


431

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

이것은 저를 거기에 데려다 주지만 별개의 이름이 아닌 모든 프로그램 이름을 세는 것입니다 (이 쿼리에서 예상하지는 않습니다). 별개의 프로그램 이름을 선택하지 않고 계산하는 방법을 내 머리에 감쌀 수는 없습니다. 또는 뭔가.

답변:


729

모든 DISTINCT 프로그램 이름을 프로그램 유형 및 푸시 번호로 계산

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

DISTINCT COUNT(*)각 고유 카운트에 대한 행을 반환합니다. 원하는 것은 COUNT(DISTINCT <expression>): 그룹의 각 행에 대한 표현식을 평가하고 널이 아닌 고유 한 값의 수를 리턴합니다.


110

각 고유 값의 발생 횟수를 가져와야했습니다. 열에 지역 정보가 포함되었습니다. 내가 끝내었던 간단한 SQL 쿼리는 다음과 같습니다.

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

나에게 다음과 같은 목록을 줄 것입니다.

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

안녕하세요 @ Netsi1964 동일한 쿼리가 사용되지만 Region, State, Count를 원합니다. 가능합니까? 도와주세요

48

고유 한 열에 대한 파생 테이블을 생성 한 다음 해당 테이블에서 카운트를 쿼리해야합니다.

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

여기 dt 은 파생 테이블입니다.


1
감사합니다! 나는 많은 데이터베이스에 걸쳐서 많은 SQL을 사용했으며, 이것이 "as ​​X"를 사용하여 임시 테이블로 자격을 부여한 것은 이번이 처음입니다.
Mmm

6
참고 "DT"여기에 대한 일반 용어 파생 테이블이 아닌 임시 테이블
8forty

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

15

이 시도:

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

-1

이것은 마지막 주소 필드에 저장된 핀 코드 수를 얻으려는 좋은 예입니다.

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

-6
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.