2009-10-05 48 views
279

Trong SQL Server 2005, tôi có bảng cm_production liệt kê tất cả mã được đưa vào sản xuất. Bảng này có một ticket_number, program_type, và program_name và push_number cùng với một số cột khác.Truy vấn SQL Server - Chọn COUNT (*) với DISTINCT

MỤC TIÊU: Đếm tất cả các tên chương trình riêng biệt theo loại chương trình và đẩy số

Những gì tôi có cho đến nay là:

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

này được tôi partway ở đó, nhưng nó đếm tất cả các tên chương trình, không phải là những cái khác biệt (mà tôi không mong đợi nó làm trong truy vấn đó). Tôi đoán tôi chỉ không thể quấn đầu của tôi xung quanh làm thế nào để nói với nó để chỉ đếm tên chương trình riêng biệt mà không chọn chúng. Hoặc một cái gì đó.

Trả lời

478

Đếm tất cả các tên chương trình DISTINCT theo loại chương trình và đẩy số

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

COUNT địa chỉ DISTINCT (*) sẽ trả về một hàng cho mỗi độc đáo đếm. Những gì bạn muốn là COUNT(DISTINCT expression): đánh giá biểu thức cho mỗi hàng trong một nhóm và trả về số lượng giá trị duy nhất, không phải là duy nhất.

+4

Cảm ơn bạn. Tôi có một thời gian khó khăn khái niệm hóa các truy vấn SQL vì một lý do nào đó. Điều này hoạt động hoàn hảo. – somacore

+4

Làm cách nào để nhận được COUNT mục nhập DISTINCT dựa trên nhiều cột? Tôi đã cố gắng thực hiện 'SELECT COUNT (DISTINCT col1, col2)', nhưng 'COUNT' có vẻ giải thích điều này như một số lượng các đối số sai. –

+3

@Bepetersn: Tôi đề nghị bạn hỏi một câu hỏi riêng biệt –

13

thử điều này:

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

Tôi cần có số lần xuất hiện của từng giá trị riêng biệt. Cột chứa thông tin về Vùng. Truy vấn SQL đơn giản tôi đã kết thúc với là:

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

Trong đó sẽ cho tôi một danh sách như thế, nói:

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

Trong postgresql, bạn chỉ có thể sử dụng 'count (*)' thay vì 'count (*) AS count'. – ogirginc

+0

hey @ Netsi1964 cùng một truy vấn được sử dụng nhưng tôi muốn Region, State, Count, nó có thể là có thể? Xin hãy giúp tôi –

18

Bạn phải tạo một bảng tạm thời cho các cột riêng biệt và sau đó truy vấn đếm từ bảng mà

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

đây dt là một bảng temp

+0

Cảm ơn bạn! Tôi đã sử dụng rất nhiều SQL trong cuộc sống của mình trên rất nhiều cơ sở dữ liệu, và đây là lần đầu tiên tôi phải hội đủ điều kiện nó như một bảng tạm thời với "as X". – Mmm

+2

Lưu ý rằng thuật ngữ thông thường cho "dt" ở đây là _derived_ bảng, không phải bảng tạm thời – 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

Đây là một ví dụ điển hình mà bạn muốn để có được đếm Mã PIN mà được lưu trữ trong các cuối cùng của trường địa chỉ

SELECT DISTINCT 
    RIGHT (address, 6), 
    count(*) AS count 
FROM 
    datafile 
WHERE 
    address IS NOT NULL 
GROUP BY 
    RIGHT (address, 6) 
Các vấn đề liên quan