SQL để tìm số lượng giá trị riêng biệt trong một cột


340

Tôi có thể chọn tất cả các giá trị riêng biệt trong một cột theo các cách sau:

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

Nhưng làm thế nào để tôi có được số lượng hàng từ truy vấn đó? Là một truy vấn con cần thiết?


1
Phiên bản SQL Server nào bạn đang sử dụng?
Kevin Fairchild

Câu trả lời:


613

Bạn có thể sử dụng DISTINCTtừ khóa trong COUNThàm tổng hợp:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Điều này sẽ chỉ tính các giá trị riêng biệt cho cột đó.


7
Không, tôi không biết bạn có thể đặt từ khóa riêng biệt ở đó.
Christian Oudard

13
cũng hoạt động trên các nhómselect A,COUNT(DISTINCT B) from table group by A
tmanthey

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

11 năm sau, và điều này vẫn hữu ích
wundermahn

175

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

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

60
Vì bạn đang nhóm columnName, bạn đã nhận được các giá trị riêng biệt chỉ một lần và distincttừ khóa không làm gì ở đây. Hãy thử truy vấn mà không có nó, kết quả hoàn toàn giống nhau.
Antti29

26

Xin lưu ý rằng Count () bỏ qua các giá trị null, vì vậy nếu bạn cần cho phép null là giá trị riêng biệt của nó, bạn có thể làm một cái 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
/

Tôi thực sự nghĩ rằng tuyên bố trường hợp của bạn là để nói:case when my_col is null then 1 else my_col end
James Jensen

Để rõ ràng:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis

số lượng (*) bao gồm null
thực dụng

1
@PuctoraticProgrammer Tôi đoán vậy, nhưng không có thứ gọi là hàng null, chỉ có giá trị null và count(*)cụ thể là số lượng hàng.
David Aldridge

20

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

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
Chắc chắn là câu trả lời hay nhất IMO
Briford Wylie

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

Điều này sẽ cho số lượng các nhóm cột khác nhau.


11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

bạn phải đếm col khác biệt, sau đó đặt bí danh.


5
select Count(distinct columnName) as columnNameCount from tableName 

0

**

Sử dụng SQL sau đây, chúng ta có thể nhận được giá trị cột khác biệt trong Oracle 11g.

**

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Bạn có thể sử dụng truy vấn này, để đếm dữ liệu khác nhau / khác biệt. Cảm ơn


0

Sau MS SQL Server 2012, bạn cũng có thể sử dụng chức năng cửa sổ.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

Đếm (riêng biệt ({tên trường})) là dự phòng

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


2
Không, điều này không chính xác. count(field)trả về số dòng mà fieldnot null.
Antti29
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.