2008-09-26 28 views
255

tôi có thể chọn tất cả các giá trị khác biệt trong một cột trong các cách sau:SQL để tìm số của giá trị khác biệt trong một cột

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

Nhưng làm cách nào để nhận số hàng từ truy vấn đó? Truy vấn con là bắt buộc phải không?

+0

Phiên bản nào của SQL Server bạn đang sử dụng? –

Trả lời

462

Bạn có thể sử dụng từ khóa DISTINCT trong COUNT chức năng tổng hợp:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

này sẽ chỉ tính các giá trị khác biệt cho cột đó.

+2

Gọn gàng, tôi không biết bạn có thể đặt từ khóa riêng biệt ở đó. –

+10

cũng hoạt động trên các nhóm 'chọn A, COUNT (DISTINCT B) từ nhóm bảng theo A' – tmanthey

+2

bạn có thể mở rộng ví dụ này để phân biệt trên nhiều cột không? – eugene

6
select Count(distinct columnName) as columnNameCount from tableName 
9
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count; 

bạn phải tính số liệu riêng biệt đó, sau đó đặt bí danh đó là bí danh.

22

Hãy nhận biết Đếm rằng() bỏ qua các giá trị null, vì vậy nếu bạn cần phải cho phép null như giá trị riêng biệt của nó, bạn có thể làm điều gì đó khó khăn như:

select count(distinct my_col) 
     + count(distinct Case when my_col is null then 1 else null end) 
from my_table 
/
+0

Tôi thực sự nghĩ rằng trường hợp của bạn đã có nghĩa là để nói: 'trường hợp khi my_col là null sau đó 1 else my_col end' –

+0

Để rõ ràng:' '' SELECT my_col, COUNT (my_col) + COUNT (TRƯỜNG SAO my_col IS NULL THEN 1 ELSE NULL END) như CountOf từ my_Table GROUP BY my_col''' –

+0

count (*) bao gồm nulls – PragmaticProgrammer

9
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd 
) T 

này sẽ cung cấp đếm riêng biệt nhóm cột.

126

Điều này sẽ cung cấp cho bạn BOTH giá trị cột riêng biệt và số lượng của mỗi giá trị. Tôi thường thấy rằng tôi muốn biết cả hai phần thông tin.

select distinct columnName, count(columnName) as CountOf from tableName group by columnName 
+42

Vì bạn đang nhóm theo 'columnName', bạn đã nhận được các giá trị riêng biệt chỉ một lần và từ khóa' khác biệt' không làm bất cứ điều gì ở đây. Hãy thử truy vấn mà không có nó, kết quả là chính xác như nhau. – Antti29

-5

Count (riêng biệt ({} fieldname)) là không cần thiết

Đơn giản chỉ cần Đếm ({fieldname}) cung cấp cho bạn tất cả các giá trị khác biệt trong bảng đó. Nó sẽ không (như nhiều presume) chỉ cung cấp cho bạn Count của bảng [tức là KHÔNG giống như Count (*) từ bảng]

+2

Không, đây là * không * chính xác. 'count (field)' trả về số dòng mà 'field' là' không null'. – Antti29

8

Một tổng sql của giá trị duy nhất column_name và được sắp xếp theo tần số:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC; 
Các vấn đề liên quan