Tại sao chúng ta không thể sử dụng count(distinct *)
trong SQL? Như để đếm tất cả các hàng riêng biệt?Số lượng SQL (*) và riêng biệt
Trả lời
select count(*) from (select distinct * from MyTable) as T
Mặc dù tôi đề nghị rằng bạn suy nghĩ lại bất kỳ truy vấn sử dụng DISTINCT
. Trong một tỷ lệ lớn các trường hợp, GROUP BY
phù hợp hơn (và nhanh hơn).
EDIT: Sau khi đọc các ý kiến hỏi, tôi phải chỉ ra rằng bạn nên bao giờ hỏi DBMS để làm việc nhiều hơn thực sự cần làm để có được một kết quả. Nếu bạn biết trước rằng sẽ không có bất kỳ hàng trùng lặp nào trong một bảng, thì đừng sử dụng DISTINCT
.
@CHristian - hi, chưa bao giờ thấy nó được thực hiện theo cách đó trước đây. hết tò mò chạy nó với một bảng hiện có trên đầu của tôi và tôi nhận được 'cú pháp sai gần') ''. làm việc trong máy chủ sql ms? lưu ý - lựa chọn của tôi trong các dấu ngoặc chạy hoàn toàn – Kamal
Trên Oracle DISTINCT và GROUP BY có cùng một kế hoạch thực hiện vì DISTINCT được triển khai bằng GROUP BY. Vì vậy, không nên có sự khác biệt. –
@Kamal: Xin lỗi, quên rằng Máy chủ SQL hơi khó hiểu với các truy vấn lồng nhau. Thêm một bí danh tên vào cuối ('như T') giải quyết được vấn đề. –
Bạn thực sự có thể.
Nếu bạn đã có số nhận dạng, tuy nhiên, bạn sẽ không có bất kỳ hàng hoàn toàn riêng biệt nào. Nhưng bạn có thể làm ví dụ:
SELECT COUNT(DISTINCT SenderID) FROM Messages
Bạn có thể chọn tất cả các cột trong bảng và nhóm của bạn bằng cách ...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
Điều này không thực sự có được những gì câu hỏi yêu cầu mặc dù. –
tại sao không?
select
count(distinct name)
from
people
Bởi vì hai người có thể có cùng tên. OP hỏi về COUNT (DISTINCT *). –
Xin lỗi, đó là một văn bản khác trong câu hỏi khi tôi trả lời. – silent
UberKludge, và có thể được postgre cụ thể, nhưng
select count(distinct table::text) from table
Bạn có thể thử một CTE trong Sql Server 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
Để trả lời câu hỏi, Từ các tài liệu
Chỉ định rằng tất cả các hàng phải là được tính để trả về tổng số hàng trong một cái bàn. COUNT () không có thông số và không thể sử dụng với DISTINCT. COUNT () không yêu cầu tham số biểu thức vì, theo định nghĩa , nó không sử dụng thông tin về bất kỳ cột cụ thể nào. COUNT (*) trả về số lượng hàng trong một bảng được chỉ định mà không cần loại bỏ các từ khóa trùng lặp. Nó tính mỗi hàng riêng biệt. Điều này bao gồm hàng chứa giá trị null.
Khi bạn nói, "Từ tài liệu", tài liệu đó sẽ là gì? –
Tài liệu trợ giúp máy chủ Sql. http://msdn.microsoft.com/en-us/library/ms175997.aspx –
COUNT (*) là số hàng phù hợp với truy vấn.
Hàng có chứa thông tin duy nhất như rowid. Tất cả các hàng đều theo định nghĩa riêng biệt.
Bạn phải tính các trường hợp giá trị khác biệt trong một số trường thay thế.
Tại sao một hàng chứa thông tin duy nhất? Nó không phải ... nó có lẽ nên nhưng không * yêu cầu *. – Murph
một số languajes có thể không xử lý được 'khác biệt *', nếu bạn muốn phân biệt được thực hiện qua nhiều cột, bạn có thể muốn sử dụng 'ColumnA | CộtB ', kết hợp các giá trị trước khi đánh giá nếu chúng khác nhau. Hãy chú ý xem các biến của bạn có phải là số hay không và trình xử lý cơ sở dữ liệu của bạn có thể tạo kiểu tự động cho các chuỗi ký tự.
Đây cũng không phải là phương pháp chứng minh đầy đủ. Ví dụ, ('test', 'string') và ('tes', 't string') sẽ giống nhau. Bạn có thể làm một cái gì đó với đệm các chuỗi, nhưng nó bị lộn xộn. IMO tốt hơn chỉ sử dụng truy vấn con với DISTINCT và sau đó nhận được COUNT từ đó. –
select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)
Điều này không trả lời được câu hỏi –
- 1. SQL riêng biệt và đếm
- 2. SQL: Cách nhận được số lượng của mỗi giá trị riêng biệt trong một cột?
- 3. SQL: đếm số giá trị riêng biệt trong mỗi cột
- 4. SQL Populating với dữ liệu riêng biệt và một chuỗi
- 5. R regex gsub chữ và số riêng biệt
- 6. Cách đặt JScrollPane để chỉ hiển thị số lượng hàng riêng biệt
- 7. SQL chọn số lượng hồ sơ động
- 8. Số lượng Máy chủ SQL chậm
- 9. Chọn một giá trị riêng biệt trong nhiều bảng (sql)
- 10. nhóm SQL theo ngày, với số lượng
- 11. truy vấn SQL, hàng riêng biệt cần thiết
- 12. Tổng số gấu trúc tổng hợp riêng biệt
- 13. Việc đếm số lần xuất hiện của nhiều cột riêng biệt trong SQL
- 14. Tách một số nguyên thành các chữ số riêng biệt
- 15. SQL: Tính riêng biệt trong mệnh đề where?
- 16. SQL chọn các hàng riêng biệt và bỏ qua hàng nếu trống
- 17. Excel - Đếm chữ cái và số riêng biệt trong một ô đơn lẻ
- 18. Git hợp nhất và giữ riêng biệt?
- 19. SPARQL truy vấn và đếm riêng biệt
- 20. LINQ: Riêng biệt và trật tự
- 21. SQL Server varbinary (max) và varchar (max) dữ liệu trong một bảng riêng biệt
- 22. Số lượng tối đa các bảng khả thi trong SQL Server và MySQL
- 23. số riêng biệt bằng dấu phẩy với asp.net mvc
- 24. Sum số liệu cụ thể trong Excel tờ riêng biệt
- 25. Số riêng biệt bằng dấu phẩy trên chuỗi iOS
- 26. SSMS hiển thị truy vấn riêng biệt Trong kết quả riêng biệt Tab
- 27. Mysql chọn riêng biệt
- 28. Chèn số lượng lớn MS-SQL với RODBC
- 29. Mysqldumper: Dumping mỗi bảng riêng biệt
- 30. Cách tìm số lượng kết nối SQL Server đồng thời
Bạn có ý nghĩa gì bởi 'các hàng riêng biệt'? –
Bạn có các hàng được sao chép trong toàn bộ hàng không, đó là những gì bạn đang cố tìm? –
Bây giờ khi tôi nghĩ về nó, bởi vì các bảng của chúng ta được chuẩn hóa, chúng ta sẽ không có các hàng chính xác như vậy nên nó vô dụng đúng không ?? Đây có phải là lý do không ?? –