爲什麼我們不能在SQL中使用count(distinct *)
?如何計算所有不同的行?SQL count(*)and distinct
回答
select count(*) from (select distinct * from MyTable) as T
雖然我強烈建議你重新考慮使用DISTINCT
任何疑問。在很大比例的情況下,GROUP BY
更合適(也更快)。
編輯:已經閱讀問題的意見,我要指出,你應該從未問DBMS做更多的工作比實際需要做才能獲得結果。如果您事先知道表格中不會有任何重複行,請不要使用DISTINCT
。
@Christian - 嗨,從來沒有見過這樣做過。出於好奇,在我的最後一個現有的表上運行它,我得到'不正確的語法附近')''。在MS SQL SERVER中工作?注意 - 我的括號內的選擇完美運行 – Kamal 2009-12-01 13:26:19
在Oracle上DISTINCT和GROUP BY具有相同的執行計劃,因爲使用GROUP BY實現了DISTINCT。所以應該沒有區別。 – 2009-12-01 13:27:48
@Kamal:對不起,忘了SQL Server有點嵌套查詢。在末尾添加一個別名('as T')解決了這個問題。 – 2009-12-01 13:29:17
你的確可以。
但是,如果您有標識符,則不會有任何完全不同的行。但是,你可以爲實例來:
SELECT COUNT(DISTINCT SenderID) FROM Messages
您可以選擇在你的桌子和組中的所有列...
SELECT column1, column2, column3, count(*)
FROM someTable
GROUP BY column1, column2, column3
這實際上並沒有得到什麼問題,但是。 – 2009-12-01 14:31:59
爲什麼不呢?
select
count(distinct name)
from
people
因爲兩個人可能有相同的名字。 OP詢問COUNT(DISTINCT *)。 – 2009-12-01 13:18:49
對不起,這是我回答時問題中的另一個文本。 – silent 2009-12-01 13:24:25
UberKludge,並可以postgre具體,但
select count(distinct table::text) from table
你可以嘗試CTE在SQL Server 2005
;WITH cte AS (
SELECT DISTINCT Val1,Val2, Val3
FROM @Table
)
SELECT COUNT(1)
FROM cte
要回答這個問題,從文檔
指定所有行應計爲 ,以返回行中總數爲 的行 一張桌子。 COUNT()不參與 參數,不能與 DISTINCT一起使用。 COUNT()不需要 表達式參數,因爲通過 定義,它不使用 有關任何特定 列的信息。 COUNT(*)返回指定表中 行的數量,而不刪除重複項, 。它分別計算每行 。這包括包含空值的 行。
當你說,「從文檔」哪些文件將是? – 2009-12-01 14:29:34
Sql Server幫助文檔。 http://msdn.microsoft.com/en-us/library/ms175997.aspx – 2009-12-01 14:44:50
COUNT(*)是匹配查詢的行數。
一行包含獨特信息,如rowid。所有行按定義不同。
您必須對某些字段中值的不同實例進行計數。
爲什麼一行包含唯一信息?它不必......它可能應該但它不需要*。 – Murph 2009-12-01 13:23:19
某些languajes可能無法處理'distinct *',因此,如果您希望通過很多列進行區分,您可能需要使用'distinct ColumnA || ColumnB',在判斷它們是否不同之前結合這些值。請注意,您的變量是否是數字型的,您的數據庫處理程序是否可以自動對字符串進行類型轉換。
這也不是一個完整的證明方法。例如('test','string')和('tes','t string')看起來是一樣的。你可以用填充字符串來做一些事情,但是會變得混亂。更好的IMO只是使用DISTINCT的子查詢,然後從中獲得COUNT。 – 2009-12-01 14:27:51
select count (Tag_no) from tab_raw_tag_value where tag_no in (select distinct tag_no from tab_raw_tag_value)
這不回答這個問題 – 2012-10-04 08:54:56
- 1. Count(Distinct x)and Group By y
- 2. SQL DISTINCT plus count
- 3. SQL count distinct
- 4. sql distinct + count
- 5. pyodbc parameterised sql result count distinct distinct
- 6. SQL HAVING COUNT and JOIN
- 7. DISTINCT COUNT每天sql
- 8. Sql Select Distinct Row Count
- 9. Drupal SQL「Select count distinct」
- 10. SQL Count and Floor
- 11. C#LINQ Lambda query with select,Where,Count and Distinct
- 12. sum and distinct-count measures(star schema design koan)
- 13. SQL語法錯誤(COUNT(DISTINCT ..))
- 14. SELECT CASE中的DISTINCT COUNT SQL
- 15. DISTINCT COUNT返回SQL錯誤
- 16. distinct count(*)
- 17. JPA Select Count Distinct
- 18. SELECT COUNT(DISTINCT [名])
- 19. SQL查詢count AND存在
- 20. count and sum the values sql
- 21. SQL select count and data multiple numbers
- 22. 導軌COUNT SELECT DISTINCT
- 23. mysql count distinct value
- 24. COUNT DISTINCT MS ACCESS
- 25. tsql distinct count subquery2
- 26. Count DISTINCT Employees
- 27. MySQL COUNT DISTINCT
- 28. Laravel Distinct Count
- 29. SELECT COUNT(DISTINCT ..)
- 30. Count()return total instead distinct count
你是什麼意思的'不同的行'? – 2009-12-01 13:16:50
你有整行中重複的行,你試圖找到什麼? – 2009-12-01 13:17:19
現在,當我想到它,因爲我們的表是正常化的,我們不會有完全相同的行,所以它沒用的權利?這是原因嗎? – 2009-12-01 13:20:46